Android: Unknown “Bitmap” cause by 'mGlow' causing memory leak
Android: Unknown “Bitmap” cause by 'mGlow' causing memory leak
1. 新建一個android工程,只有一個listview,通過MAT工具檢視記憶體情況莫名其妙多了>200K記憶體空間(android4.4 Genymotion)。
2.通過右鍵“List Objects"->"with incoming references"可以檢視"byte[281880]"誰使用。
3.原來是ListView中的mEdgeGlowBottom和mEdgeGlowTop在使用"byte[281880]",檢視ListView原始碼,發現是在AbsListView中定義mEdgeGlowBottom和mEdgeGlowTop,用於overscroll時顯示的效果。
4.android4.4原始碼EdgeEffect類中載入資源R.drawable.overscroll_edge,R.drawable.overscroll_glow,至此"byte[281880]"的源頭找到了。
5.找到資源源頭,如何去掉"byte[281880]"記憶體佔用呢?
1)AbsListView的setOverScrollMode函式是建立EdgeEffect物件的地方,只要想辦法把mOverScrollMode設定為OVER_SCROLL_NEVER。
2)View的建構函式中會呼叫setOverScrollMode,所以需要在xml中設定屬性,之前在程式碼中設定了,結果無效。
6.配置ListView屬性。
7.至此mGlow bitmap記憶體佔用就沒有了。如果不需要overScrollMode效果的話可以去掉。在android5.0原始碼中發現EdgeEffect實現方式變了,不是載入Drawable,而是使用Paint進行繪製的。
總結:不需要的功能就disable,減少記憶體佔用;能不使用圖片的地方就不使用,用程式碼實現,減小記憶體佔用,apk空間佔用。
相關文章
- objective-c "performSelector may cause a leak because its selector is unknown".ObjectperformSelector
- Android memory leak using MATAndroid
- 如何理解Memory leak
- Android WebView Memory Leak WebView記憶體洩漏AndroidWebView記憶體
- 在Android 專案時的防止Memory leak 要注意的事項Android
- Linux C/C++ Memory Leak Detection ToolLinuxC++
- Oracle DBLink bug引發的故障(Session Hang Memory leak)OracleSession
- Threads are going to be renewed over time to try and avoid a probable memory leak.threadGo
- 理解Android BitmapAndroid
- Android Bitmap 使用Android
- Android Bitmap 初探Android
- Android中的BitmapAndroid
- Android Bitmap優化Android優化
- Android: Bitmap/Canvas/DrawableAndroidCanvas
- Android Bitmap面面觀Android
- 記錄錯誤: *Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘spec_templaMySqlJDBCExceptionError
- Bitmap回收—Canvas: trying to use a recycled bitmap android.graphicsCanvasAndroid
- android bitmap壓縮方案Android
- Android-認識BitmapAndroid
- Android JNI 之 Bitmap 操作Android
- Android Bitmap 大小計算Android
- Android Bitmap實戰技巧Android
- GCHandle LeakGC
- 一行程式碼教你解決FlutterPlatformViews記憶體洩露(memory leak)行程FlutterPlatformView記憶體洩露
- SQL Server 記憶體洩露(memory leak)——遊標導致的記憶體問題SQLServer記憶體洩露
- Android效能優化(Memory)Android優化
- Android Profile--Memory MonitorAndroid
- Android Bitmap(點陣圖)詳解Android
- Android Bitmap的常用壓縮方式Android
- android中Bitmap的剪下與拉伸Android
- Performance and Memory Improvements in ART(Android O)ORMAndroid
- SQL Server 記憶體洩露”(memory leak)的案例—遊標導致的記憶體問題SQLServer記憶體洩露
- Android Bitmap快取池使用詳解Android快取
- Android-採用Matrix對Bitmap加工Android
- android canvas 編輯bitmap畫虛線AndroidCanvas
- Android圖片快取之Bitmap詳解Android快取
- 使用高德地圖時出現 trying to use a recycled bitmap android.graphics.Bitmap地圖Android
- Android 效能測試——Memory Monitor 工具Android