从WebView获取位图会导致OutOfMemory崩溃

时间:2017-08-09 11:03:35

标签: android webview bitmap android-canvas

我有一个自定义WebView,我希望获得其内容的位图(包括屏幕外)。我使用了这段代码,我是从here获得的:

 public static Bitmap getBitmapFromWebviewV2(WebView webView) {
    webView.measure(View.MeasureSpec.makeMeasureSpec(
        View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    webView.layout(0, 0, webView.getMeasuredWidth(),
            webView.getMeasuredHeight());
    webView.setDrawingCacheEnabled(true);
    webView.buildDrawingCache();
    Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(),
            webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

    Canvas bigcanvas = new Canvas(bm);
    Paint paint = new Paint();
    int iHeight = bm.getHeight();
    bigcanvas.drawBitmap(bm, 0, iHeight, paint);
    webView.draw(bigcanvas);
    return bm;
}

当我放大很多时,它工作正常,在这种情况下,我得到OutOfMemory Crash。我用相同的图片(略微缩放并缩放到最大值)测试了它,它的行为与我上面提到的相同。

我尝试通过添加

来解决这个问题
while(webView.canZoomOut()){
      webView.zoomOut();
}

一开始,但它根本没有帮助。

1 个答案:

答案 0 :(得分:-1)

快速修复: -

在AndroidManifest.xml文件中设置 android:largeHeap =“true”

<application
    android:name="yourapplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher_rounded"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:roundIcon="@mipmap/ic_launcher_rounded"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

Gud运气:)