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空間佔用。
相關文章
- [Memory Leak] 1. console.log cause memory leak
- 如何理解Memory leak
- [Memory leak] 3. Garbage collection in Closure
- Angular 18+ 高階教程 – Memory leak, unsubscribe, onDestroyAngular
- 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: Bitmap/Canvas/DrawableAndroidCanvas
- Android中的BitmapAndroid
- Bitmap回收—Canvas: trying to use a recycled bitmap android.graphicsCanvasAndroid
- Android-認識BitmapAndroid
- Android JNI 之 Bitmap 操作Android
- android bitmap壓縮方案Android
- Android效能優化(Memory)Android優化
- 記錄錯誤: *Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘spec_templaMySqlJDBCExceptionError
- 一行程式碼教你解決FlutterPlatformViews記憶體洩露(memory leak)行程FlutterPlatformView記憶體洩露
- Android Bitmap(點陣圖)詳解Android
- Android粒子篇之Bitmap畫素級操作Android
- Android O 8.0 以上 bitmap記憶體分配Android記憶體
- android 關於Bitmap壓縮處理解析Android
- Android圖片編碼機制(Bitmap,Skia,libJpeg)Android
- 阿里Android開發規範:Bitmap、Drawable 與動畫阿里Android動畫
- [轉]Android Studio匯入工程報錯 Error:Cause: peer not authenticated 解決方案AndroidError
- Android之NDK開發錯誤 error: unknown type name 'JNIEXPORT'AndroidErrorExport
- Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause:...ApacheBATUIExceptionErrorSQLAPP
- Android系統Bitmap記憶體分配原理與優化Android記憶體優化
- Android - 利用擴充套件函式為Bitmap新增文字水印Android套件函式
- Android Bitmap變遷與原理解析(4.x-8.x)Android
- Android系統Bitmap記憶體分配原理與最佳化Android記憶體
- c# svg轉Bitmap Bitmap轉ImageSourceC#SVG
- Jedis bitmap
- IO_FILE——leak 任意讀
- 【Visual Leak Detector】配置項 ForceIncludeModulesmd
- MyEtherWallet Domain-Hijacking Financially Victimized 198 Users, Causing $320K LossAINaNZed
- memory
- Unknown custom element: <> -
- ORA-00600 [729], [12284], [space leak],