web-dev-qa-db-de.com

WebView-Rendering-Problem in Android KitKat

Ich habe an einer Anwendung gearbeitet, die über eine WebView verfügt, in der eine statische Seite aus den Assets geladen wird (auch unter Verwendung von JavaScript). Diese WebView funktioniert nicht in KitKat, sie bleibt leer. Ich bin mir der Änderung in der Rendering-Engine (Webkit in Chromium) bewusst, die in WebView in KitKat stattgefunden hat, und habe die Schritte zum Migrieren ausprobiert, die auf der Seite Android Developers aufgeführt sind. Aber es hat nicht geholfen.

In logcat erhalte ich eine Fehlermeldung, die von der Chromium-Quelle ausgegeben wird.

W/AwContents﹕ nativeOnDraw failed; clearing to background color.

Bitte schlagen Sie einen Workaround vor.

36
gnuanu

In meinem Fall, in Android 4.4, bekam ich einen schwarzen Hintergrund, egal was ich eingestellt habe, und diese Fehlermeldung in meiner LogCat: nativeOnDraw schlug fehl; Hintergrundfarbe löschen.

Bei Googling scheint dies darauf zurückzuführen zu sein, dass die hardwarebeschleunigte Leinwanddarstellung in Chromium WebView nicht unterstützt wird. Ich habe diese Zeile zum WebView hinzugefügt, um die hardwarebeschleunigte Leinwand zu deaktivieren, und jetzt funktioniert sie.

mWebview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
43
georgiecasey

Ich bin auf das gleiche Problem gestoßen, habe aber eine Problemumgehung gefunden. Sie müssen lediglich einen CSS-Hintergrund für Ihre Webseite festlegen. So wie:

body {
  background: white;
}

Es stellt sich heraus, dass, wenn Sie nicht explizit einen Hintergrund für eine Webseite festlegen, der WebView diesen Hintergrund nicht zeichnen kann, und Sie eine transparente WebView erhalten.

6
DataDino

Dies scheint ein Chrom-Webview-Fehler zu sein.

Hier ist ein Thread zum Thema: https://jira.appcelerator.org/browse/TIMOB-16479

Anscheinend ist die akzeptierte Antwort kein sicherer Fix. In dem Link wird eine Problemumgehung erwähnt.

4
Tore Rudberg

Die Deaktivierung des Hardware-Beschleunigers ist mit einer hohen Leistung verbunden. In meinem Fall habe ich herausgefunden, dass dies in KitKat mir passiert ist, als ich das webview-Element innerhalb einer Aktivität wieder instanziierte, die beendet und später neu gestartet wurde Versuch und Irrtum, als ich hinzufügte: 

RelativeLayout layout = (RelativeLayout) findViewById(R.id.webViewContainer);
layout.removeAllViews();
webview.destroy();

Kurz bevor die Aktivität beendet wird, scheint das Problem gelöst zu sein. Ich habe es noch nicht auf vielen Geräten getestet, aber wenn diese Lösung richtig ist, ist es bei weitem besser als die Deaktivierung der Hardwarebeschleunigung für KitKat für den Webview.

0
asiop