硬件加速停止处理新API

时间:2013-08-29 07:24:18

标签: android webview hardware-acceleration

我需要在我的一个WebView上启用硬件加速。到目前为止,我发现如果我用11或13的目标API(分别是Android 3.0和3.2)构建我的项目,硬件加速就会启用,一切都很好。但奇怪的是,当我使用API​​ 17或18构建我的项目时,由于某种原因,我开启所有打开硬件加速的努力都会被忽略。

到目前为止,我已经尝试过:

1)在清单

中的标签中设置android:hardwareAccelerated="true"

2)相同,但是对于包含WebView的活动

3)我的Activity的onCreate中的以下代码(在设置内容视图之前):

getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

4)相同,但使用getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

在所有情况下,webView.isHardwareAccelerated()都会返回false,即使它正在工作。

请帮忙,因为这个而被卡在API 13上会非常蹩脚......

1 个答案:

答案 0 :(得分:4)

在API 18上测试:

通过将Runnable发布到WebView

来执行检查
WebView webView = (WebView) findViewById(R.id.webview_id);

// Shows: "Is hardware accelerated? false"
// Toast.makeText(YourActivity.this, "Is hardware accelerated? " + 
                                             // webView.isHardwareAccelerated(),
                                                 // Toast.LENGTH_LONG).show();

webView.post(new Runnable() {

    @Override
    public void run() {
        Shows: "Is hardware accelerated? true"
        Toast.makeText(YourActivity.this, "Is hardware accelerated? " + 
                                              webView.isHardwareAccelerated(),
                                                  Toast.LENGTH_LONG).show();

        if (webView.isHardwareAccelerated()) {
            // isAccelerated();
        } else {
            // isNotAccelerated();
        }
    }
});

从硬件加速的资源页面:

  

如果您的目标API级别,默认情况下会启用硬件加速   是> = 14,但也可以明确启用。

如果您正在显示的图像仍然是像素化的,请尝试设置:

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

并查看图像的像素化是否会变好。

考虑阅读Hardware Acceleration上的资源页面。