Benutzerdefinierte Ansicht optimieren

Wenn Sie eine gut gestaltete Ansicht haben, die auf Gesten reagiert und zwischen Zuständen wechselt, muss sie schnell ausgeführt werden. Damit die Benutzeroberfläche nicht träge wirkt oder während der Wiedergabe ruckelt, müssen Animationen immer mit 60 Bildern pro Sekunde ausgeführt werden.

Ansicht beschleunigen

Um die Ansicht zu beschleunigen, entfernen Sie unnötigen Code aus Routinen, die häufig aufgerufen werden. Beginnen Sie mit onDraw(), da dies die größte Wirkung hat. Entfernen Sie insbesondere Zuweisungen in onDraw(), da diese zu einer Garbage Collection führen können, die ein Ruckeln verursacht. Weisen Sie Objekte während der Initialisierung oder zwischen Animationen zu. Nehmen Sie niemals eine Zuweisung vor, während eine Animation ausgeführt wird.

Neben der Optimierung von onDraw() sollte die Methode so selten wie möglich aufgerufen werden. Die meisten Aufrufe von onDraw() sind das Ergebnis eines Aufrufs von invalidate(). Entfernen Sie daher unnötige Aufrufe von invalidate().

Eine weitere sehr aufwendige Operation ist das Durchlaufen von Layouts. Wenn eine Ansicht requestLayout() aufruft, durchläuft das Android-UI-System die gesamte Ansichtshierarchie, um die Größe der einzelnen Ansichten zu ermitteln. Wenn widersprüchliche Messungen gefunden werden, kann die Hierarchie mehrmals durchlaufen werden. UI-Designer erstellen manchmal tiefe Hierarchien mit verschachtelten ViewGroup-Objekten. Diese tiefen Ansichtshierarchien verursachen Leistungsprobleme. Gestalten Sie Ihre Ansichtshierarchien daher so flach wie möglich.

Wenn Sie eine komplexe Benutzeroberfläche haben, können Sie eine benutzerdefinierte ViewGroup schreiben, um das Layout zu erstellen. Im Gegensatz zu den integrierten Ansichten kann Ihre benutzerdefinierte Ansicht anwendungsspezifische Annahmen zur Größe und Form ihrer untergeordneten Elemente treffen. Daher ist es nicht erforderlich, die untergeordneten Elemente zu durchlaufen, um Messungen zu berechnen.

Wenn Sie beispielsweise eine benutzerdefinierte ViewGroup haben, die ihre eigene Größe nicht an alle untergeordneten Ansichten anpasst, vermeiden Sie den Aufwand, alle untergeordneten Ansichten zu messen. Diese Optimierung ist nicht möglich, wenn Sie die integrierten Layouts verwenden, die für eine Vielzahl von Anwendungsfällen geeignet sind.