我的应用程序具有此代码段

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

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

即使我启用了缓存,是什么导致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);

最佳答案

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

if(android.os.Build.VERSION.SDK_INT >= 11) frame.setLayerType(LAYER_TYPE_SOFTWARE, null);
frame.setDrawingCacheEnabled(true);

09-27 12:38