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;
}
解决方案
if(bitmapObject.isRecycled()==false) //如果没有回收
bitmapObject.recycle();
bitmapObject.recycle();
///
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都截下来,你这个是只能截看到的部分~
好吧,是我理解错了。还是注意回收内存就是了。
用户评论