Android: WebView с аппаратным ускорением показывает только белый экран

Я заметил, что загрузка страницы с огромным содержимым javascript, например JQuery, на WebView приводит к очень низкой производительности в Android 3.x. Я искал и обнаружил, что лучше установить android:hardwareAccelerated в true.

Однако после этого в веб-просмотре отображается только белый экран и ничего. Вот что я использую для тестирования:

public class TestWebViewWithHAActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView webView = (WebView) findViewById(R.id.web);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setRenderPriority(RenderPriority.HIGH);
        webView.getSettings().setPluginState(PluginState.ON_DEMAND);
        webView.loadUrl("http://www.google.com");        
}

и установите android:hardwareAccelerated="true" на уровне приложения в манифесте

Некоторые из журналов показывают ошибку рендеринга:

07-10 17:30:44.847 D/libEGL  (2417): loaded /system/lib/egl/libGLES_android.so
07-10 17:30:44.857 D/libEGL  (2417): loaded /system/lib/egl/libEGL_VIVANTE.so
07-10 17:30:44.877 D/libEGL  (2417): loaded /system/lib/egl/libGLESv1_CM_VIVANTE.so
07-10 17:30:44.907 D/libEGL  (2417): loaded /system/lib/egl/libGLESv2_VIVANTE.so
07-10 17:30:44.947 I/        (2417): visual ID: 1
07-10 17:30:44.947 D/OpenGLRenderer(2417): Creating OpenGL renderer caches
07-10 17:30:44.947 D/OpenGLRenderer(2417): Enabling debug mode 0
07-10 17:30:44.947 D/OpenGLRenderer(2417): Layers will be composited as regions
07-10 17:30:45.067 I/ActivityManager(121): Displayed com.example.testwebviewwithha/.TestWebViewWithHAActivity: +705ms
07-10 17:30:45.567 I/dalvikvm-heap(202): Clamp target GC heap from 48.338MB to 48.000MB
07-10 17:30:45.587 D/dalvikvm(202): GC_EXPLICIT freed 219K, 4% free 47342K/48839K, paused 3ms+5ms
07-10 17:30:46.447 D/ShaderProgram(2417): could not compile shader 35632:
07-10 17:30:46.447 D/ShaderProgram(2417): (1:0) : warning : Extension : GL_OES_EGL_image_external is not provided by this compiler.
07-10 17:30:46.447 D/ShaderProgram(2417): (2:0) : error : Extension GL_OES_EGL_image_external do not support 'require'.
07-10 17:30:46.447 D/ShaderProgram(2417): (2:0) : error : Error in parsing.
07-10 17:30:46.447 D/ShaderProgram(2417): (8:0) : error : syntax error
07-10 17:30:46.447 D/ShaderProgram(2417): 
07-10 17:30:46.447 D/ShaderProgram(2417): couldn't load the pixel shader!
07-10 17:30:46.457 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.467 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.487 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.517 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.527 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.537 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.557 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.577 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.607 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.617 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.647 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.657 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.677 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.687 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.707 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.737 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.747 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.767 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.777 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.807 D/GLUtils (2417): GL ERROR - after glBindTexture() glError (0x501)
07-10 17:30:46.817 D/OpenGLRenderer(2417): GL error from OpenGLRenderer: 0x501
07-10 17:30:46.837 D/GLUtils (2417): GL ERROR - after glBindTexture() glError (0x501)
07-10 17:30:46.837 D/GLUtils (2417): GL ERROR - after drawQuad() glError (0x501)

Какова причина, вызывающая это?

Конечно, если я не использую аппаратное ускорение, все работает нормально. Но это противоречило бы моей цели.

Я также тестировал эмулятор устройства Android 3.0. Я работаю нормально, но я сомневаюсь, что android:hardwareAccelerated="true" действительно подействует или нет. Это просто мое устройство не поддерживает? Я использую планшет Ainol Novo 7 Basic (Android 3.2).


person Yeung    schedule 10.07.2012    source источник
comment
есть ли интернет-разрешение в вашем файле манифеста??   -  person AkashG    schedule 10.07.2012
comment
Вы добавили прозрачный фон в свой веб-просмотр где-то в своем коде?   -  person VinceFR    schedule 26.07.2012
comment
Нет, активность — это весь код, который я использовал   -  person Yeung    schedule 03.08.2012


Ответы (1)


Добавьте подобную проверку в свою деятельность:

if (Build.VERSION.SDK_INT >= 19) {
    // chromium, enable hardware acceleration
    webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
    // older android version, disable hardware acceleration
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
person Devanshu Kanik    schedule 06.07.2016