Meine android webviews
sind langsam. Dies gilt für alle Geräte, von Telefonen bis hin zu 3.0+
Tablets mit mehr als angemessenen technischen Daten
Ich weiß , dass WebViews soll „begrenzt“ werden , aber ich sehe , Web - Anwendungen mit Telefon Lücke durchgeführt , die alle möglichen verwenden müssen CSS3
und JQuery
Zauberei, laufen sie einfach gut und schnell
Ich vermisse also etwas. Gibt es eine Art, mit der myWebview.SPEEDHACK(1)
ich die Dinge beschleunigen kann?
Außerdem wird der Inhalt meiner Webansicht manchmal einfach nicht geladen, anstatt langsam zu laden, wird er einfach nicht geladen. Das Asset, mit dem ich teste, wird lokal gespeichert, keine Fehler.
Antworten:
Dies hängt von der geladenen Webanwendung ab. Probieren Sie einige der folgenden Ansätze aus:
Legen Sie eine höhere Renderpriorität fest (veraltet von API 18+):
Aktivieren / Deaktivieren der Hardwarebeschleunigung:
Deaktivieren Sie den Cache (wenn Sie Probleme mit Ihrem Inhalt haben):
quelle
Das Hinzufügen
android:hardwareAccelerated="true"
in das Manifest war das einzige, was die Leistung für mich signifikant verbessert hatWeitere Informationen hier: http://developer.android.com/guide/topics/manifest/application-element.html#hwaccel
quelle
android:hardwareAccelerated="true"
CSS hatten 3D-Animationen lange Verzögerungen, bevor sie gestartet wurden. Das Scrollen von DIVs in anderen scrollbaren DIVs funktionierte nicht und die App war instabiler.Die Lösung für uns war das Gegenteil. Wir haben die Hardwarebeschleunigung nur in WebView (und nicht in der gesamten App im Manifest) mithilfe dieses Codes deaktiviert:
CSS3-Animationen sind jetzt flüssiger. Wir verwenden Android 4.0.
Weitere Informationen finden Sie hier: https://code.google.com/p/android/issues/detail?id=17352
quelle
WebView not displayed because it is too large to fit into a software layer (or drawing cache), needs 11534400 bytes, only 8294400 available
Ich denke, das funktioniert am besten:
Android 19 verfügt über eine Chromium-Engine für WebView. Ich denke, es funktioniert besser mit Hardwarebeschleunigung.
quelle
Ich hatte das gleiche Problem und musste es klären. Ich habe diese Lösungen ausprobiert, aber am Ende hat sich die Leistung, zumindest beim Scrollen, überhaupt nicht verbessert. Also hier die Arbeit, die ich gemacht habe und die Erklärung, warum es für mich funktioniert hat.
Wenn Sie die Möglichkeit hatten, die Drag-Ereignisse ein wenig zu erkunden, indem Sie eine "MiWebView" -Klasse erstellt, die "onTouchEvent" -Methode überschrieben und zumindest die Zeit gedruckt haben, in der jedes Drag-Ereignis auftritt, werden Sie feststellen, dass sie getrennt sind rechtzeitig für (bis zu) 9ms entfernt. Das ist eine sehr kurze Zeit zwischen den Ereignissen.
Schauen Sie sich den WebView-Quellcode an und sehen Sie sich nur die Funktion onTouchEvent an. Es ist einfach unmöglich, dass es vom Prozessor in weniger als 9 ms gehandhabt wird (Träumen Sie weiter !!!). Aus diesem Grund wird ständig die Meldung "Miss a Drag, während wir auf die Antwort von WebCore auf das Aufsetzen warten" angezeigt. Botschaft. Der Code kann einfach nicht rechtzeitig verarbeitet werden.
Wie man es repariert? Erstens können Sie den onTouchEvent-Code nicht neu schreiben, um ihn zu verbessern. Er ist einfach zu viel. Sie können es jedoch "verspotten", um die Ereignisrate für das Ziehen von Bewegungen auf 40 ms oder 50 ms zu begrenzen. (Dies hängt vom Prozessor ab).
Alle Berührungsereignisse sehen folgendermaßen aus: ACTION_DOWN -> ACTION_MOVE ...... ACTION_MOVE -> ACTION_UP. Also müssen wir die DOWN- und UP-Bewegungen beibehalten und die MOVE-Rate filtern (das sind die Bösen).
Und hier ist eine Möglichkeit, dies zu tun (Sie können weitere Ereignistypen hinzufügen, z. B. 2 Finger berühren. Alles, was mich hier interessiert, ist das Scrollen mit einem Finger).
Wenn Sie diese Klasse anstelle von WebView verwenden, werden Sie beim Scrollen den Unterschied feststellen.
Dies ist nur ein Lösungsansatz, der jedoch aufgrund von Bildschirmberührungen bei Verwendung von WebView noch nicht für alle Verzögerungsfälle vollständig implementiert ist. Es ist jedoch die beste Lösung, die ich gefunden habe, zumindest für meine spezifischen Bedürfnisse.
quelle
Ich habe alle Vorschläge ausprobiert, um das Renderleistungsproblem in meiner Phonegap-App zu beheben. Aber nichts hat wirklich funktioniert.
Nach einem ganzen Tag der Suche habe ich es endlich geschafft. Ich setze innerhalb des Tags (nicht des Tags) meines AndroidManifest
Jetzt verhält sich die App genauso schnell wie mein Webbrowser. Scheint so, als ob Hardwarebeschleunigung nicht immer die beste Funktion ist ...
Das detaillierte Problem, das ich hatte: https://stackoverflow.com/a/24467920/3595386
quelle
Keine dieser Antworten war für mich nicht hilfreich.
Endlich habe ich Grund und Lösung gefunden. Der Grund waren viele CSS3-Filter (Filter, -webkit-Filter).
Lösung
Ich habe die Erkennung von WebView im Webseiten-Skript hinzugefügt, um dem HTML-Body die Klasse "lowquality" hinzuzufügen. Übrigens. Sie können WebView einfach verfolgen, indem Sie den Benutzeragenten in den WebView-Einstellungen festlegen. Dann habe ich eine neue CSS-Regel erstellt
quelle
Wenn nur einige wenige Komponenten Ihrer Webansicht langsam oder verzögert sind, fügen Sie diese zu den Elementen CSS hinzu:
Dies war der einzige Speedhack, der sich wirklich auf meine Webansicht ausgewirkt hat. Aber achten Sie darauf, es nicht zu überbeanspruchen! (Weitere Informationen zum Hack finden Sie in diesem Artikel .)
quelle
will-change: transform
.Versuche dies:
quelle
Wenn Sie an das
onclick
Ereignis gebunden sind , kann es auf Touchscreens langsam sein.Um es schneller zu machen, verwende ich fastclick , das die viel schnelleren Berührungsereignisse verwendet, um das Klickereignis nachzuahmen.
quelle
$('#').on('touchstart', function() {...});
im Gegensatz zu onclick umgangen werden