Hardwarebeschleunigung

Die Android-2D-Rendering-Pipeline unterstützt die Hardwarebeschleunigung. Das bedeutet, dass alle Zeichenvorgänge, die auf dem Canvas ausgeführt werden, die GPU verwenden. Aufgrund der erhöhten Ressourcen, die für die Hardwarebeschleunigung erforderlich sind, verbraucht Ihre App mehr RAM.

Die Hardwarebeschleunigung ist standardmäßig aktiviert. Wenn Ihre Anwendung nur Standard-Composables verwendet, sollte das globale Aktivieren keine negativen Auswirkungen auf das Rendern haben. Da die Hardwarebeschleunigung jedoch nicht für alle 2D-Zeichnungsvorgänge unterstützt wird, kann sich die Aktivierung auf einige Ihrer benutzerdefinierten Zeichenaufrufe auswirken. Probleme äußern sich in der Regel als unsichtbare Elemente, Ausnahmen oder falsch gerenderte Pixel. Um dieses Problem zu beheben, bietet Android Ihnen die Möglichkeit, die Hardwarebeschleunigung auf mehreren Ebenen zu aktivieren oder zu deaktivieren. Weitere Informationen finden Sie unter Hardwarebeschleunigung steuern.

Wenn Ihre Anwendung benutzerdefinierte Zeichnungen ausführt, testen Sie sie auf echten Hardwaregeräten mit aktivierter Hardwarebeschleunigung, um Probleme zu finden. Im Abschnitt Unterstützung für Zeichenvorgänge werden bekannte Probleme mit der Hardwarebeschleunigung und Möglichkeiten zur Umgehung dieser Probleme beschrieben.

Weitere Informationen finden Sie unter OpenGL mit den Framework-APIs.

Hardwarebeschleunigung steuern

Sie können die Hardwarebeschleunigung auf den folgenden Ebenen steuern:

  • Anwendung
  • Aktivität
  • Fenster
  • Zusammensetzbar

Anwendungsebene

Fügen Sie in der Android-Manifestdatei dem Tag <application> das folgende Attribut hinzu, um die Hardwarebeschleunigung für die gesamte Anwendung zu aktivieren:

<application android:hardwareAccelerated="true" ...>

Aktivitätslevel

Wenn Ihre Anwendung bei global aktivierter Hardwarebeschleunigung nicht ordnungsgemäß funktioniert, können Sie diese auch für einzelne Aktivitäten ein- und ausschalten. Wenn Sie die Hardwarebeschleunigung auf Aktivitätsebene aktivieren oder deaktivieren möchten, können Sie das Attribut android:hardwareAccelerated für das Element <activity> verwenden. Im folgenden Beispiel wird die Hardwarebeschleunigung für die gesamte Anwendung aktiviert, aber für eine Aktivität deaktiviert:

<application android:hardwareAccelerated="true">
    <activity ... />
    <activity android:hardwareAccelerated="false" />
</application>

Fensterstufe

Wenn Sie noch mehr Kontrolle benötigen, können Sie die Hardwarebeschleunigung für ein bestimmtes Fenster mit dem folgenden Code aktivieren:

window.setFlags(
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
)

Zusammenfassungsstufe

In Compose gibt es keinen Schalter pro Composable, um die Hardwarebeschleunigung zu deaktivieren.

Wenn Sie ein Composable in einer eigenen Ebene rendern möchten, verwenden Sie Modifier.graphicsLayer. So können sich Transformationsattribute (z. B. alpha, scaleX, scaleY, translationX, translationY, rotationX, rotationY, rotationZ und transformOrigin) ändern, ohne dass der Zeichencode des Composables noch einmal ausgeführt werden muss. Für die beste Leistung sollten Sie immer die Lambda-Form des Modifikators verwenden, um diese Eigenschaften festzulegen.

Wenn Sie explizit einen Offscreen-Puffer für erweiterte Zeichenvorgänge wie benutzerdefiniertes Blending innerhalb der Ebene erzwingen möchten, verwenden Sie CompositingStrategy.Offscreen. Weitere Informationen finden Sie unter Grafikmodifikatoren.

Wenn Sie einen benutzerdefinierten Zeichenvorgang haben, der unbedingt Software-Rendering erfordert, können Sie eine Legacy-Ansicht mit AndroidView hosten und