我正在创建一个布局位图。它在大多数设备上运行良好,但在很少的三星设备中,它抛出OOM。下面是我用来将布局转换为位图的代码
private void enableViewCache() {
viewToConvert.setDrawingCacheEnabled(true);
viewToConvert.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.AT_MOST),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.AT_MOST));
viewToConvert.buildDrawingCache(true);
}
public Bitmap getBitmapFromView() {
Bitmap b = Bitmap.createBitmap(viewToConvert.getDrawingCache());
viewToConvert.setDrawingCacheEnabled(false);
viewToConvert.destroyDrawingCache();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
return b;
}
我在Bitmap.createBitmap调用时得到了OOM。我已经检查了stackoverflow中的大多数OOM位图问题,其中提到了使用抽样和所有但我不知道如何在这个用例中实现它。
答案 0 :(得分:0)
我不确定您要完成的任务,但在大多数情况下,您不希望从Bitmap
中提取View
。你通常想要的是将位图保存在不同的地方(LRU Cache可能?)。我的猜测是视图的绘图缓存是问题。
无论如何,问题可能就是你处理大位图的方式。 Read this article所以你知道如何采样,缩小和其他技术,这样你就不会得到OOM。