Auf dieser Seite wird erläutert, was eine Überschneidung ist, wie sie diagnostiziert wird und wie Sie sie beseitigen oder mindern können.
Wenn eine App dasselbe Pixel mehrmals innerhalb eines einzelnen Frames zeichnet, wird dies als Überzeichnung bezeichnet. Überschreibungen sind normalerweise nicht notwendig und sollten am besten beseitigt werden. Die Überschneidung wird zu einem Leistungsproblem, wenn sie GPU-Zeit verschwendet, um Pixel zu rendern, die nicht zu dem beitragen, was der Nutzer auf dem Bildschirm sieht.
Über die Überschneidung
Überschneidung bezieht sich auf das mehrfache Zeichnen eines Pixels auf dem Bildschirm in einem einzelnen Rendering-Frame. Wenn du beispielsweise mehrere übereinander angeordnete UI-Karten hast, wird auf jeder Karte ein Teil der darunterliegenden Karte ausgeblendet.
Das System muss jedoch die verborgenen Teile der Karten im Stapel zeichnen. Das liegt daran, dass gestapelte Karten gemäß dem Malalgorithmus gerendert werden, d. h. in umgekehrter Reihenfolge. Durch diese Rendering-Sequenz kann das System durchsichtige Objekte wie Schatten wie in der Alphaphase übermischen.
Probleme beim Überschreiben finden
Die Plattform bietet die folgenden Tools, mit denen Sie feststellen können, ob eine Überziehung die Leistung Ihrer App beeinträchtigt.
GPU-Überzeichnungstool debuggen
Das Tool Debug GPU Overdraw verwendet Farbcodierungen, um anzuzeigen, wie oft Ihre App jedes Pixel auf dem Bildschirm zeichnet. Je höher diese Zahl ist, desto wahrscheinlicher wirkt sich ein Überzug auf die Leistung der Anwendung aus.
Weitere Informationen finden Sie unter GPU-Überziehung visualisieren.
GPU-Rendering-Tool für Profil
Das Profil-GPU-Rendering-Tool zeigt die Zeit an, die jede Phase der Rendering-Pipeline benötigt, um einen einzelnen Frame als Scroll-Histogramm anzuzeigen. Der orangefarbene Teil Process jedes Balkens zeigt an, wann das System Puffer auswechselt. Dieser Messwert gibt wichtige Hinweise auf Überschneidungen.
Bei weniger leistungsfähigen GPUs kann die verfügbare Ausführungsrate – die Geschwindigkeit, mit der die GPU den Frame-Zwischenspeicher füllen kann – gering sein. Wenn die Anzahl der Pixel, die zum Zeichnen eines Frames erforderlich sind, steigt, kann die GPU mehr Zeit für die Verarbeitung neuer Befehle benötigen und den Rest des Systems auffordert, zu warten, bis er auf den aktuellen Stand kommt. Der Balken Process (Prozess) zeigt, dass diese Spitze auftritt, wenn die GPU mit dem Versuch, Pixel so schnell wie möglich zu zeichnen, überlastet ist. Andere Probleme als die reine Anzahl von Pixeln können ebenfalls zu einem Anstieg dieses Messwerts führen. Wenn das Tool zur Fehlerbehebung bei GPU-Overdraw z. B. starke Überziehungen und Process-Spitzen aufweist, liegt wahrscheinlich ein Problem mit dem Überziehen vor.
Weitere Informationen finden Sie unter Renderinggeschwindigkeit für Profil-GPU.
Überschneidung korrigieren
Sie können Folgendes tun, um Überschneidungen zu reduzieren oder zu entfernen:
- Entfernen Sie unnötige Hintergründe aus Layouts.
- Die Ansichtshierarchie vereinfachen.
- Weniger Transparenz.
Dieser Abschnitt enthält Informationen zu jedem dieser Ansätze.
Unnötige Hintergründe aus Layouts entfernen
Standardmäßig hat ein Layout keinen Hintergrund, d. h., es rendert nichts direkt für sich. Haben Layouts jedoch Hintergründe, können sie zum Überzeichnen beitragen.
Sie können die Renderingleistung verbessern, indem Sie unnötige Hintergründe entfernen. Ein unnötiger Hintergrund ist möglicherweise nicht sichtbar, da er vollständig von allem bedeckt ist, was die App darüber zeichnet. So kann es beispielsweise vorkommen, dass das System den Hintergrund eines übergeordneten Elements vollständig verdeckt, wenn darüber untergeordnete Ansichten eingeblendet werden.
Wenn Sie herausfinden möchten, warum Sie überzeichnen, sehen Sie sich die Hierarchie im Layout-Inspector-Tool an. Sie können nach Hintergründen suchen, die für den Nutzer nicht sichtbar sind, und sie entfernen. Sie können unnötige Hintergründe entfernen, wenn sich viele Container mit derselben Hintergrundfarbe befinden. Sie können als Fensterhintergrund die Haupthintergrundfarbe Ihrer App festlegen und alle Container darüber belassen, ohne Werte für den Hintergrund festzulegen.
Ansichtshierarchie vereinfachen
Mit modernen Layouts können Sie Ansichten stapeln und überlagern, um ein schönes Design zu erhalten. Dies kann jedoch die Leistung beeinträchtigen, da es zu einer Überschneidung kommt. Dies gilt insbesondere dann, wenn jedes gestapelte Ansichtsobjekt undurchsichtig ist und sowohl sichtbare als auch nicht gesehene Pixel auf dem Bildschirm gezeichnet werden müssen.
In diesem Fall können Sie die Leistung verbessern, indem Sie die Ansichtshierarchie optimieren, um die Anzahl der sich überschneidenden UI-Objekte zu reduzieren. Weitere Informationen dazu finden Sie unter Leistungs- und Ansichtshierarchien.
Weniger Transparenz
Das Rendern transparenter Pixel auf dem Bildschirm, auch als Alpha-Rendering bezeichnet, trägt entscheidend zur Überschneidung bei. Im Gegensatz zur Standardüberzeichnung, bei der das System vorhandene gezeichnete Pixel vollständig ausblendet, indem opake Pixel darauf gezeichnet werden, müssen transparente Objekte zuerst gezeichnet werden, damit die richtige Vermischung erfolgen kann.
Visuelle Effekte wie transparente Animationen, Ausblendungen und Schlagschatten sorgen für etwas Transparenz und können daher einen erheblichen Einfluss auf Überschneidungen haben. Sie können die Überschneidung in diesen Situationen verbessern, indem Sie die Anzahl der transparenten Objekte reduzieren, die Sie rendern. Sie können beispielsweise grauen Text erhalten, indem Sie schwarzen Text in einem TextView
mit einem durchsichtigen Alphawert zeichnen. Wenn Sie den Text grau zeichnen, erzielen Sie jedoch eine bessere Leistung.
Weitere Informationen zu Leistungskosten, die für die Transparenz der gesamten Zeichenpipeline entstehen, finden Sie im Video Hidden Costs of Transparency.