Android: Einfache Perfomance-Optimierungen
- Zugriff auf Klassenvariablen (Eigenschaften) sollte, wenn möglich (z.B. innerhalb der Klasse oder des Packages), direkt über die Klassenvariablen statt über die Getter und Setter-Methoden erfolgen. Performance-Steigerung liegt ca. beim Faktor 2-3.
- Bei Zusammenfügen von String-Ketten sollte man den StringBulder, statt des „+“-Operators nutzen. Mit der Anzahl der Konkatenationen steigt der Performance-Verlust beim „+“-Operator exponentiell an, da jedes Mal ein neues Objekt erzeugt werden muss. Beim StringBuilder steigt die Rechenzeit dagegen nur linear an.
- Es sollen unnötige Objekterzeugungen vermieden werden. So z.B.:
- Objekterzeugung innerhalb der Schleifen vermeiden
- Mehrfache Objekterzeugung von oft benutzen Objekten in der Klasse vemeiden (z.B.:
findViewById()). Diese sollten am besten direkt als Klassenvariablen, und somit nur einmal, initialisiert werden. - Schleifen optimieren. Satt:
for (int i = 0; i < array.length; i++) { … }sollte
int arrayLenght = array.length; for (int i = 0; i < arrayLength; i++) { … }verwendet werden.
- Layoutoptimierung mit dem mitgelieferten Tool
layoutoptdurchführen. - Größere (mehr als 100 Elemente) Arrays sind deutlich perfomanter als ArrayList Objekte.
- Einfache Klassen, sollten wenn möglich durch Arrays ersetzt werden, da dadurch die Objekterzeugung entfällt.
- Wenn möglich, sollten
finalundstaticZugriffsmodifizierer verwendet werden. - Die Schleifen, nach dem das gewünschte Ergebnis erreicht wurde, sollten durch
breakodercontinueverlassen werden und nicht unnötig die restlichen Elemente durchlaufen. - Rechenintensive oder Zeitintensive Aufgaben (z.B.: Netzwerk und Dateizugriffe) sollten immer in ein eigenes Thread ausgelagert werden, damit der Benutzer weiterhin die Kontrolle über die App behält.
- Beim WebServices und Netzwerkzugriffen sollte dem kompakteren
JSON-Format immer der Vorzug vor demXML-Format gewährt werden (kleinerer Overhead). - Benutzung des mitgelieferten Obfuscators
ProGuard, um den kompilierten Code zu optimieren (Komprimierung von Code, weglassen unbenutzer Methoden / Eigenschaften / Klassen, kürzung der Bezeichner usw.). - Test der eigenen Algorithmen auf Perfomance und Test der Alternativen (Benchmarking).
- Benutzung von
TraceView(DDMS), um Flaschenhälse beim Speicher und Ausführungszeit zu finden. - Bei den SQL-Abfragen sollten nur die wirklich notwendige Daten abgefragt werden (nur benötigte Spalten und nur die benötigte Datenmenge, Zeilenanzahl).
- Lint nutzen, um unbenutzte Resourcen und vorgeschlagene Optimierungen umzusetzen.

