Benutzerdefinierte Ansicht optimieren

Wenn Sie über eine übersichtliche Ansicht verfügen, die auf Gesten und Übergänge zwischen Status reagiert, sollten Sie dafür sorgen, dass die Ansicht schnell ausgeführt wird. Um eine langsame oder ruckelige UI zu vermeiden, sollten Animationen konsistent mit 60 Bildern pro Sekunde ausgeführt werden.

Anzeige beschleunigen

Entfernen Sie unnötigen Code aus häufig aufgerufenen Routinen, um den Aufruf zu beschleunigen. Beginnen Sie mit onDraw(), was sich am meisten auszahlt. Entfernen Sie insbesondere Zuweisungen in onDraw(), da Zuweisungen zu einer automatischen Speicherbereinigung führen können, die ein Ruckeln verursacht. Objekte während der Initialisierung oder zwischen Animationen zuweisen. Nehmen Sie keine Zuweisung vor, während eine Animation ausgeführt wird.

Achten Sie darauf, dass onDraw() nicht nur kleiner wird, sondern auch so selten wie möglich aufgerufen wird. Die meisten Aufrufe von onDraw() sind das Ergebnis eines Aufrufs von invalidate(). Vermeiden Sie also unnötige Aufrufe von invalidate().

Ein weiterer sehr kostspieliger Vorgang ist das Durchsuchen von Layouts. Wenn eine Ansicht requestLayout() aufruft, durchläuft das Android-UI-System die gesamte Ansichtshierarchie, um zu ermitteln, wie groß jede Ansicht sein muss. Wenn widersprüchliche Messungen gefunden werden, durchläuft sie die Hierarchie möglicherweise mehrmals. UI-Designer erstellen manchmal tiefe Hierarchien verschachtelter ViewGroup-Objekte. Diese tiefen Ansichtshierarchien verursachen Leistungsprobleme. Daher sollten Sie Ihre Ansichtshierarchien so flach wie möglich gestalten.

Wenn Sie eine komplexe Benutzeroberfläche haben, sollten Sie erwägen, eine benutzerdefinierte ViewGroup zu schreiben, um das Layout auszuführen. Im Gegensatz zu den integrierten Ansichten kann die benutzerdefinierte Ansicht anwendungsspezifische Annahmen über die Größe und Form der untergeordneten Ansichten treffen. Daher wird verhindert, dass die untergeordneten Ansichten durchlaufen werden, um Messungen zu berechnen.

Wenn Sie beispielsweise eine benutzerdefinierte ViwGroup haben, deren Größe nicht für alle untergeordneten Ansichten angepasst wird, vermeiden Sie den Aufwand, alle untergeordneten Ansichten zu messen. Wenn Sie integrierte Layouts für eine Vielzahl von Anwendungsfällen verwenden, ist diese Optimierung nicht möglich.