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.
Avoid 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.
Know 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.
Last updated 9 October 2013