Hi! After a modest number of projects I’ve decided to share with you some of the things that experience made me learn, I mean the hard way.
Here is the selection:
-
Think twice before adding any third party library, it’s really a serious commitment
-
Don’t use a database unless you really need to
-
You can think about realm it’s really awesome!
-
Hitting the 65k method count mark is gonna happen fast, I mean really fast! And Multidexing can save you
-
RxJava is the best alternative to AsyncTasks and so much more
-
Retrofit is the best networking library there is
-
Don’t write your own HTTP client, use Volley or OkHttp libraries
-
Shorten your code with RetroLambda
-
Combine RxJava with Retrofit and RetroLambda for maximum awesomeness!
-
I use event Bus and it’s great, but I don’t use it too much because the codebase would get really messy
-
Package by Feature, not layers
-
Move everything off the application thread, that’s can save you from ANR
-
lint your views to help you optimize the layouts and layout hierarchies so you can identify redundant views that could perhaps be removed
-
Use Gradle and its recommended project structure
-
Put passwords and sensitive data in gradle.properties
-
Use styles to avoid duplicate attributes in layout XMLs
-
Do not make a deep hierarchy of ViewGroups
-
Monitor power source and battery more data updates while charging? Suspend updates when battery is low?
-
You can think about JobScheduler
-
onLowMemory() it will be called when the whole System runs low on memory, not your App, so you can’t exactly avoid OOMs with it.
-
Drain battery is 30% (image, animation, …), and 70% (Analytics, ads, maps, gps)
-
Monitor connectivity and type of connection (more data updates while on wifi?)
-
Use the Account Manager to suggest login usernames and email addresses
-
Give your methods a clear name for what they are going to do
-
The launch screen is a user’s first experience of your application
-
Do not show the launch screen if you don’t have to
-
Tests are great for performance: Write slow (but correct) implementation then verify optimizations don’t break anything with tests
-
Keep your colors.xml short and DRY, just define the palette
-
Also keep dimens.xml DRY, define generic constants
-
In reality perfExternal is rarely used as an application on the external storage is stopped once the device is connected to a computer and mounted as USB storage
-
Use StringBuffer or Stringbuilder classes when there is a lot of modifications to string of characters
-
To avoid Memory Leaks :
-
Don’t reference View inside AsyncCallback
-
Don’t reference View from static object
-
Avoid putting views inside collection that’s don’t have clear memory pattern, you can use WeakHasMap
-
-
FlatBuffers is an efficient cross platform serialization library, so use it
-
Serializable it’s simple to implement, but in term of performance it’s really bad :(