Android: Einfache Perfomance-Optimierungen

Artikeldaten
Erste Version 0.1 (22.01.2012)
Aktuelle Version 0.32(02.08.2012)

1. Kurzbeschreibung

Auf den mobilen Geräten sind die Rechenleistung und der Akku die teuersten Einheiten, da beide die Benutzdauer des Gerätes ohne Steckdose begrenzen. Aus diesem Grund sollte jeder Entwickler seine App so weit optimieren, dass diese den Akku und andere mobile Ressourcen schont. Dieser Beitrag zeigt einige der Möglichkeiten dazu.

2. Einfache Optimierungen

  1. Zugriff auf Klassenvariablen (Eigenschaften / Felder) sollte, wenn möglich (z.B. innerhalb der Klasse oder des Packages), direkt über die Klassenvariable statt über die Getter und Setter-Methoden erfolgen. Bei externen Schnittstellen und Zugriffen ist dieses Vorgehen natürlich nicht anwendbar.
    Die Performance-Steigerung liegt ca. beim Faktor 2-3.
  2. Bei den Operationen mit Strings (Konkatenation) sollte man den StringBuilder einsetzen, statt des „+“ Operators. Der Performance-Verlust beim „+„-Operator steigt exponentiell zur Anzahl der Konkatenationen, da bei jeder Operation ein neues temporäres String-Objekt erzeugt werden muss. Beim StringBuilder steigt der Rechenaufwand dagegen nur linear an.
  3. Unnötige Objekterzeugungen sollen vermieden werden. So z.B.:
    1. Objekterzeugung innerhalb einer Schleife
    2. Mehrfache Objekterzeugung / Referenzierung auf oft verwendete Objekte (findViewById(), DBHelper() usw.)
  4. Schleifen sollen optimiert werden. Statt:
    for (int i = 0; i < array.length; i++) { … }

    sollte

    int arrayLenght = array.length;
    for (int i = 0; i < arrayLength; i++) { … }

    verwendet werden.

  5. Bei der Erstellung des Layouts können viele Fehler und unnötige Verschachtelungen auftreten. Diese können mit dem mitgelieferten Tool layoutopt analysiert und optimiert werden.
  6. Größere Arrays (mit mehr als 100 Elementen) sind deutlich performanter als ArrayList-Objekte.
  7. Sehr einfache Klassen (die nur wenige Eigenschaften und sonst nichts beinhalten), sollten, soweit es möglich ist, durch Arrays ersetzt werden, da dadurch die Objekterzeugung entfällt.
  8. An den Stellen, wo es möglich und sinnvoll ist, sollen Variablen als final oder eventuell sogar als final static definiert werden. Solche Variablen können bereits von Compiler optimiert und / oder initialisiert werden, sodass zur Laufzeit weniger Ressourcen und Rechenleistung für diese Objekte notwendig sind.
  9. Die Suchschleifen, nach dem das gewünschte Ergebnis ermittelt wurde, sollten sofort über break oder continue verlassen werden, um das unnötige Durchlaufen der restlichen Elemente zu vermeiden.
  10. Rechen- oder zeitintensive Aufgaben (Datei- oder Netzwerkzugriffe, Berechnungen) sollen immer in einen eigenen Thread ausgelagert werden (mit Services, AsyncTasks, Loadern oder eigenen Thread-Implementierungen). Dadurch bleibt die App-Oberfläche weiterhin für den Benutzer bedienbar.
  11. Bei WebServices und anderen Internet-Schnittstellen soll dem JSON-Format immer der Vorzug vor dem XML-Format gegeben werden. JSON-Format hat weniger Overhead und spart dem Benutzer nicht nur die Downloadzeit, sondern auch das Datenvolumen.
  12. Um die Datei-Größe der fertigen APK-Datei klein zu halten (und somit auch der installierten App), empfiehlt es sich den mitgelieferten Obfuscator ProGuardzu nutzen. Dieser ersetzt die langen Variablen und Methodennamen durch kürzere (z.B.:
    public String getMyPerfectValue(String oldValue)

    wird zu

    public String a(String b)

    ) und führt damit zu kompakteren Dateien.

  13. Wenn Sie mehrere Algorithmen zur Auswahl haben, um Ihre Aufgabe zu lösen, testen Sie diese auf dem Gerät und wählen Sie eine, die auf diesem am performantesten läuft (Benchmarks).
  14. Zuletzt können Flaschenhälse in der App-Performance mithilfe des TraceView (DDMS) lokalisiert werden.
  15. Bei SQL-Abfragen sollen nur die wirklich notwendigen Daten (Spalten und Datenmenge) abgefragt werden.
  16. Set ADT Version 16 kommt noch ein weiteres Tool hinzu. Lint hilf unbenutzte Ressourcen und Problemzonen beim Zugriff auf APIs (unterschiedliche Versionen) zu finden.

3. Weiterführende Ressourcen

3.1. Interne Ressourcen

3.2. Bücher

Ein Gedanke zu „Android: Einfache Perfomance-Optimierungen“

Kommentar verfassen