2014-03-27 76 views
1

免責聲明:我讀了大約20個現有問題。不幸的是他們都沒有解決我的問題。Android位圖回收

我有一個活動。此活動從全局/靜態類C獲取位圖,並將位圖設置爲ImageView。活動結束後,我嘗試重新打開該活動,但得到java.lang.RuntimeException: Canvas: trying to use a recycled bitmap例外。任何時候我都不會撥打Bitmap.recycle()。另外,我不刪除C級位圖參考我嘗試以下,但他們沒有工作:

  • 呼叫ImageView.setDrawingCacheEnabled(false)
  • 之前設置位圖ImageView,做一個深拷貝(通過Bitmap.copy()方法)

此外,我在整個活動生命週期中放置了一些日誌語句。在onDestroy()內部,在致電super.onDestroy()之前,我檢查並確保位圖不被回收(通過Bitmap.isRecycled()

我該如何解決這個問題?

回答

2

罪魁禍首原來是RemoteControlClient.MetadataEditor.apply(),它確實調用recycle()傳遞給它的位圖。

0

重新打開活動時(例如,屏幕被喚醒後),我與ImageView有類似的問題。問題不在於Bitmap本身,而在於ImageView。我的解決方案是在活動的onPause()上將ImageView的setImageBitmap設置爲null,並在activity的onResume()上調用setImageBitmap(theBitmap)。

+0

也嘗試過了,不幸的是沒有工作。 – kolistivra