2012-05-24 103 views
6

我的應用程序有此代碼段如何避免View.getDrawingCache()中的空指針?

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

哪裏MView的是FrameLayout裏的自定義子類的實例。該應用程序已經運行了6個月,成千上萬的用戶。最近我收到了一些關於傳遞給createBitmap()的空指針的報告(可能來自同一用戶,但我無法確認)。我不知道用戶使用什麼硬件或Android版本。

什麼會導致getDrawingCache()返回null,即使我在它之前啓用了緩存?它與新手機中的硬件加速有關嗎?是否因爲位圖ram不足?還要別的嗎?可以預防嗎?

編輯:我在這裏找到了這個解決方案http://tinyurl.com/7yranvj。這是一個合理的解決方法嗎?

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

回答

0

其實你的猜測是正確的。如果您正在使用硬件加速層,則無法使用繪圖緩存。新設備默認情況下具有硬件加速功能,因此可能是您的問題。您可以關閉這樣的單一視圖的硬件加速。

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