是否有人知道如何從android.view.GLES20DisplayList釋放位圖。 爲什麼它讓他們活着,即使你乾淨,比方說,手動ImageView? 或者也許有一種方法來禁用GLES20DisplayList,試圖在AndroidManifest中使用android:hardwareAccelerated =「false」,仍然沒有運氣。從android.view.GLES20DisplayList釋放位圖
貌似只有在受影響的4.2(1)
更新:(?BUG)看起來就像你不能在4.2.1禁用硬件加速
簡單的測試:
Android manifest:
application ... android:hardwareAccelerated="false"
System.out.println("isHardwareAccelerated: " + mListView.isHardwareAccelerated());
mListView.setLayerType(LAYER_TYPE_SOFTWARE, null);
System.out.println("isHardwareAccelerated: " + mListView.isHardwareAccelerated());
結果:
12-06 17:15:27.129: I/System.out(30752): isHardwareAccelerated: true
12-06 17:15:27.129: I/System.out(30752): isHardwareAccelerated: true
發生這種情況是因爲它們保留位圖直到刪除視圖。這裏是來自GLES20DisplayList的評論: /*這些列表確保DisplayList記錄的任何位圖和顯示列表在DisplayList處於活動狀態時保持活動狀態。 Bitmap和DisplayList列表由GLES20RecordingCanvas在適當的繪圖調用期間填充,並在新繪圖框架開始時或視圖從窗口分離時清除。 * /基本上你需要分離視圖才能夠回收位圖/可繪製。 – vovkab
我刪除了onStop中的視圖,仍然保留着內存。 (僅在4.2) –
內存分析儀顯示什麼?也許其他人正在保持參考或上下文被泄露?嘗試完全從ImageViews清理位圖,然後分離視圖。 – vovkab