Android: Einfache Perfomance-Optimierungen

  1. 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.
  2. 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.
  3. Es sollen unnötige Objekterzeugungen vermieden werden. So z.B.:
    1. Objekterzeugung innerhalb der Schleifen vermeiden
    2. 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.
  4. 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.

  5. Layoutoptimierung mit dem mitgelieferten Tool layoutopt durchführen.
  6. Größere (mehr als 100 Elemente) Arrays sind deutlich perfomanter als ArrayList Objekte.
  7. Einfache Klassen, sollten wenn möglich durch Arrays ersetzt werden, da dadurch die Objekterzeugung entfällt.
  8. Wenn möglich, sollten final und static Zugriffsmodifizierer verwendet werden.
  9. Die Schleifen, nach dem das gewünschte Ergebnis erreicht wurde, sollten durch break oder continue verlassen werden und nicht unnötig die restlichen Elemente durchlaufen.
  10. 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.
  11. Beim WebServices und Netzwerkzugriffen sollte dem kompakteren JSON-Format immer der Vorzug vor dem XML-Format gewährt werden (kleinerer Overhead).
  12. Benutzung des mitgelieferten Obfuscators ProGuard, um den kompilierten Code zu optimieren (Komprimierung von Code, weglassen unbenutzer Methoden / Eigenschaften / Klassen, kürzung der Bezeichner usw.).
  13. Test der eigenen Algorithmen auf Perfomance und Test der Alternativen (Benchmarking).
  14. Benutzung von TraceView (DDMS), um Flaschenhälse beim Speicher und Ausführungszeit zu finden.
  15. Bei den SQL-Abfragen sollten nur die wirklich notwendige Daten abgefragt werden (nur benötigte Spalten und nur die benötigte Datenmenge, Zeilenanzahl).
  16. Lint nutzen, um unbenutzte Resourcen und vorgeschlagene Optimierungen umzusetzen.

Leave a Response