今天热门
热点:

Bitmap.createBitmap内存溢出,bitmap.createbitmap


creatBitmap 内存溢出 OutOfMemoryError 遇到了一个很坑的问题,在调用下面的方法截图的时候,调用第一次没什么问题,但是在不做其他动作的时候在调用一次就会内存溢出,谁知道是什么问题吗


public static Bitmap createBitmap(Context context, WebView webview) {
Bitmap bmp = null;

Picture snapShot = webview.capturePicture();

bmp = Bitmap.createBitmap(snapShot.getWidth(), snapShot.getHeight(),
Bitmap.Config.ARGB_4444);

Canvas canvas = new Canvas(bmp);

snapShot.draw(canvas);

return bmp;
}


解决方案

可以借助recycle()方法显示让GC回收一个Bitmap对象,通常对一个不用的Bitmap可以使用下面的方式:
if(bitmapObject.isRecycled()==false) //如果没有回收
        bitmapObject.recycle();


///

引用
Quote: 引用

Quote: 引用

Quote: 引用

可以借助recycle()方法显示让GC回收一个Bitmap对象,通常对一个不用的Bitmap可以使用下面的方式:
if(bitmapObject.isRecycled()==false) //如果没有回收
        bitmapObject.recycle();


///

但是需要回收的是哪个bitmap,我只定义了一个,而且是作为最后的返回结果的

比如你第二次截图时, 可以回收第一次截图生成的对象。

但是这里内存溢出是出在
Bitmap.createBitmap(snapShot.getWidth(), snapShot.getHeight(),
Bitmap.Config.ARGB_4444);
这一句,不是生成的bitmap。

Bitmap.createBitmap(snapShot.getWidth(), snapShot.getHeight()  这一句不正是在生成bitmap对象吗?dalvik进程可以使用的内存是一定的, 如果之前的bitmap对象占用了过多内存,当然有可能使后面的bitmap分配不成功。


        webview.setDrawingCacheEnabled(true);
        webview.buildDrawingCache();  //启用DrawingCache并创建位图
        Bitmap bitmap = Bitmap.createBitmap(webview.getDrawingCache()); //创建一个DrawingCache的拷贝,因为DrawingCache得到的位图在禁用后会被回收
        webview.setDrawingCacheEnabled(false);  //禁用DrawingCahce否则会影响性能
        webview.destroyDrawingCache();

用这种方式截图,而且用bitmap的话如果对质量不是很需要的话可以进行压缩,bitmap用完记得回收,bitmap是占用内存的, 所以一定要注意回收,不然就可能内存溢出。

引用
我这是把整个webview都截下来,你这个是只能截看到的部分~

好吧,是我理解错了。还是注意回收内存就是了。

www.zrccd.nettrue/topics/20181029/188400.htmlTechArticleBitmap.createBitmap内存溢出,bitmap.createbitmap creatBitmap 内存溢出 OutOfMemoryError 遇到了一个很坑的问题,在调用下面的方法截图的时候,调用第一次没什么问题,但是在不做其他动作的时候在...

相关文章

    暂无相关文章

用户评论

大家都在看