6

我的应用程序有这个代码片段

mView.setDrawingCacheEnabled(true);
mBitmap = Bitmap.createBitmap(mView.getDrawingCache());

其中 mView 是 FrameLayout 的自定义子类的一个实例。该应用程序已经运行了 6 个月,现已拥有数千名用户。最近我收到了一些关于传递给 createBitmap() 的空指针的报告(可能来自同一用户,但我无法确认)。我不知道用户使用什么硬件或安卓版本。

即使我在它之前启用了缓存,什么会导致 getDrawingCache() 返回 null?是否与新手机的硬件加速有关?是因为位图的内存不足吗?还要别的吗?可以预防吗?

编辑:我在这里找到了这个解决方案http://tinyurl.com/7yranvj。这是一个合理的解决方法吗?

mBitmap = Bitmap.createBitmap(mView.getWidth(), mView.getHeight(),
        Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(mBitMap);
mView.draw(canvas);
4

1 回答 1

0

实际上你的猜测是正确的。如果您使用的是硬件加速层,则不能使用绘图缓存。新设备默认启用硬件加速,因此可能是您的问题。您可以像这样为单个视图关闭硬件加速。

if(android.os.Build.VERSION.SDK_INT >= 11) frame.setLayerType(LAYER_TYPE_SOFTWARE, null);
frame.setDrawingCacheEnabled(true);
于 2013-08-01T10:17:50.850 回答