Problem z renderowaniem widoku sieci Web w Android KitKat

Pracowałem nad aplikacją, która ma WebView, w którym statyczna strona jest ładowana z zasobów (również za pomocą JavaScript). Ten WebView nie działa w KitKat, pozostaje pusty. Zdaję sobie sprawę ze zmiany w silniku renderowania (webkit na chromium), która nastąpiła w WebView w kitkat i wypróbowałem kroki migracji, które są podane na stronie programistów Androida. Ale to nie pomogło.

W logcat dostaję błąd, który jest wyrzucany z Chromium źródło.

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

Zaproponuj obejście.

Author: Martin Vseticka, 2013-12-19

5 answers

W moim przypadku, w Androidzie 4.4, otrzymywałem czarne tło bez względu na to, co ustawiłem i ten Komunikat o błędzie w moim LogCat: nativeOnDraw nie powiódł się; wyczyszczenie do koloru tła.

Z googlowania wynika, że renderowanie płótna z akceleracją sprzętową nie jest obsługiwane w Chromium WebView. Dodałem tę linię do widoku sieci Web, aby wyłączyć przyspieszane sprzętowo płótno i teraz działa.

mWebview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
 43
Author: georgiecasey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-26 05:46:41

Natknąłem się na ten sam problem, ale znalazłem obejście. Wszystko, co musisz zrobić, to wyraźnie ustawić tło CSS dla swojej strony internetowej. Tak:

body {
  background: white;
}

Jak się okazuje, jeśli nie ustawisz jawnie tła dla strony internetowej, Widok sieci Web nie narysuje tego tła i skończysz z przezroczystym widokiem sieci Web.

 6
Author: DataDino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-21 05:19:03

To wygląda na błąd chromium webview.

Oto wątek o problemie: https://jira.appcelerator.org/browse/TIMOB-16479

Najwyraźniej przyjęta odpowiedź nie jest pewną poprawką. Obejście zostało wspomniane w linku.

 4
Author: Tore Rudberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-03 12:13:47

Wyłączenie akceleratora sprzętowego wiąże się z dużą wydajnością, w moim przypadku dowiedziałem się, że w Kitkat zdarzyło mi się to, gdy ponownie tworzyłem instancję elementu webview w aktywności, która została zakończona, a później ponownie uruchomiona. Po wielu próbach i błędach, kiedy dodałem:

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

Tuż przed zakończeniem aktywności, wydaje się, że problem został rozwiązany. Nie testowałem go jeszcze na wielu urządzeniach, ale jeśli to rozwiązanie jest właściwe, to zdecydowanie lepiej niż wyłączenie akceleracja sprzętowa dla KitKat dla webview.

 0
Author: asiop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-31 16:00:46
package com.example.testandroid;



public class MainActivity extends ActionBarActivity {

WebView webView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    if (savedInstanceState != null)
    {
        ((WebView)findViewById(R.id.web_view)).restoreState(savedInstanceState);
    }
    else{

        webView=(WebView)findViewById(R.id.web_view);
        webView.loadUrl("http://www.google.co.in");
        webView.getSettings().getJavaScriptEnabled();
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

        webView.setWebViewClient(new WebViewClient()

        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view,
                    String url) {
                // TODO Auto-generated method stub
                view.loadUrl(url);
                return true;
            }
        });
    }
}


protected void onSaveInstanceState(Bundle outState) {
    webView.saveState(outState);
}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
}

}
 -2
Author: Raj008,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 12:56:51