Ich versuche also zu verstehen, wie ich die Hardwarebeschleunigung (wenn verfügbar) in einem benutzerdefinierten View
, das ständig animiert, richtig nutzen kann. Dies ist die Grundvoraussetzung für meine onDraw()
:
Ich aktiviere Hardware-Ebenen in onAttachedToWindow()
und deaktiviere sie in onDetachedFromWindow()
, aber ich versuche zu verstehen, ob ich sie tatsächlich benutze oder nicht. Im Wesentlichen ändert sich die i/j
-Schleife, die drawBitmap()
aufruft, nie. Das einzige, was sich ändert, ist die Canvas
Übersetzung. Wird das Bitmap
automatisch als Textur hinter den Kulissen auf der GPU gespeichert, oder muss ich dazu manuell etwas tun?
In welchen Ansichten setzen Sie View.LAYER_TYPE_HARDWARE
genau? Wenn Sie in der Ansicht, die den oben gezeigten Zeichencode enthält, eine Hardwareschicht festlegen, veranlassen Sie das System dazu, wesentlich mehr als nötig zu arbeiten. Da Sie nur Bitmaps zeichnen, müssen Sie hier nichts machen. Wenn Sie Canvas.drawBitmap()
aufrufen, speichert das Framework die resultierende OpenGL-Textur in Ihrem Namen zwischen.
Sie könnten jedoch Ihren Code ein wenig mehr optimieren. Anstatt drawBitmap()
aufzurufen, können Sie untergeordnete Ansichten verwenden. Wenn Sie diese untergeordneten Elemente mithilfe der Methoden offset*()
(oder setX()
/ setY()
) verschieben, wendet das Framework weitere Optimierungen an, um zu vermeiden, dass die Methoden draw()
erneut aufgerufen werden.
Im Allgemeinen sollten Hardware-Layer auf Ansichten eingestellt werden, die teuer zu zeichnen sind und deren Inhalt sich nicht oft ändert (so ziemlich das Gegenteil von dem, was Sie tun):
Sie können Androids Tracer für OpenGL ES verwenden, um zu sehen, ob Ihre Ansicht OpenGL-Befehle ausgibt.
Tracer ist ein Tool zum Analysieren von OpenGL für Embedded Systems (ES) -Code in Ihrer Android-Anwendung. Mit diesem Tool können Sie OpenGL ES-Befehle und Frame-für-Frame-Bilder erfassen, um zu verstehen, wie Ihre Grafikbefehle ausgeführt werden.
Es gibt auch ein Tutorial über Android Performance Study von Romain Guy, das seine Verwendung fast im Handumdrehen beschreibt Schritt.
Tags und Links android performance hardware-acceleration android-view