Ich implementiere zur Zeit eine Software-Tastatur (mit einer ausgefeilten Vorhersage), und das Zeichnen mit Leinwand ist in Bezug auf die Leistung nicht ausreichend. Ich bekomme Frame-Drawing-Zeiten weit über 100ms, was eindeutig nicht akzeptabel ist.
Die Tastatur besteht aus etwa 33 Tasten, von denen jeder mit drawRoundRect und einem einfachen Text darüber gezeichnet wird. Es werden keinerlei Widgets verwendet, also ist es die einfache Performance. Außerdem sind fast alle Googles-Performance-Tipps im Einsatz, daher ist das auch nicht der Grund für die Geschwindigkeit.
Ich habe jetzt einen Punkt erreicht, an dem der Wechsel zu opengl eigentlich Sinn machen würde, aber ich bin immer noch skeptisch, wenn man bedenkt, welche Auswirkungen eine OpenGL-basierte Tastatur auf die Akkulaufzeit hat.
Da ich zu diesem Thema keine ausreichende Dokumentation gefunden habe, hoffe ich, dass mich jemand hier in die richtige Richtung weisen kann.
Unabhängig davon, wie stark der Akku entladen wird, möchten Sie dies wahrscheinlich nicht tun, da die meisten vorhandenen Geräte nicht mehrere OpenGL-Kontexte gleichzeitig unterstützen, sodass Ihre Softtastatur mit jeder verwendeten Anwendung inkompatibel ist OpenGL für eine eigene Zeichnung. Auf diesen Geräten gehört der OpenGL-Kontext nur der Vordergrundanwendung. Es kann nicht wie die Soft-Tastatur in sekundären Teilen der Benutzeroberfläche verwendet werden.
Wie das vorhergehende Poster schon sagte, würden Sie wahrscheinlich am besten schauen, wie Sie Ihre normale Zeichnung optimieren können. Das Zeichnen von Vektoren ist ziemlich langsam, daher würde es sehr hilfreich sein, sie in eine Bitmap vorzurerendern, um Bitmap-Blits zu erstellen. Achten Sie auch darauf, nur die Teile des Fensters zu zeichnen, die sich geändert haben. 100ms ist eine ziemlich wahnsinnige Zeit, um die Benutzeroberfläche zu zeichnen, also gibt es fast sicher signifikante Optimierungen, die Sie vornehmen können. Vielleicht möchten Sie sich den KeyboardView-Code in der Plattform ansehen (der von der Standard-Soft-Tastatur und dem Beispiel-IME verwendet wird); Dies enthält bereits viele ähnliche Zeichnungsoptimierungen.
Eine Nebenbemerkung: Hast du in Betracht gezogen, die Schlüssel einmal zu rendern und sie dann als Sprites zu nehmen und diese zu blitzen? Es sollte dem Rendering von Vektorgrafiken weit überlegen sein.
Ich kann Ihnen keine harten Zahlen geben (und apphacker wies darauf hin, dass dies gerätespezifisch ist), aber selbst wenn OpenGL hardwarebeschleunigt ist und daher mehr Akku verbraucht, sollte der Vorgang viel schneller abgeschlossen werden und weniger Strom verbrauchen gesamt. Wenn es nicht hardwarebeschleunigt ist, scheint es logisch zu sein, dass es nur mehr Energie verbrauchen sollte, wenn es länger dauert, den Vorgang abzuschließen, da Sie nur eine Zeichnungs-API für eine andere austauschen. Alles in allem, da man nur zeichnen muss, wenn externe Ereignisse passieren, sollte es auf lange Sicht nicht viel ausmachen, da die Leute wahrscheinlich nur ein paar Tasten pro Minute Trinkgeld geben.
Sie müssen es wahrscheinlich nur implementieren (vielleicht in einem vereinfachten Testfall) und Messungen durchführen.
Tags und Links android surfaceview opengl-es battery