We summarise our approach to performance optimisation and some of the experimental findings below:
Talk to colleagues and pick the best algorithm; having the best possible algorithm is the most effective way to optimise performance.
Keep your architecture simple and to the point without extra layers of method calls or objects for artificial abstraction. Mobile front end code does not last for ever, so over-engineering and excessive abstraction into multiple classes will slow you down compared to simple use of variables.
Use a worker thread architecture as your baseline for networking, storage and background calculations.
Add a game loop thread and disposable media threads to this as needed.
WeakReference
cachingAvoid memory problems by always accessing image data in memory
using a WeakReference
Cache.
Create a type of virtual memory by duplicating the WeakReference
cache contents in Flash memory (Record Management
System) so that you can quickly recover items which are no longer
available in RAM.
final
and similar micro-optimisations by habit as you codeKnow the rules of micro-optimisation for memory performance, logic and calculations. Include those as you develop, but trust Proguard to add the finishing touches.
Help Proguard by making everything possible final
or static final
. Avoid static variables in high
performance loops as they are slower than instance variables.
Profile your application in an emulator.
Also test the actual run-time of critical code sections on
the phone using System.currentTimeMillis()
to see
and carefully measure the effects of your code changes.