Android記憶體洩漏(執行緒造成的記憶體洩漏與資源未關閉造成的記憶體洩漏)
阿新 • • 發佈:2019-02-05
一.執行緒造成的記憶體洩漏
對於執行緒造成的記憶體洩漏,也是平時比較常見的,leakCanary官方Demo就是執行緒成造成的記憶體洩漏,使用了AsyncTask去執行非同步執行緒,現在我們換個寫法,直接使用Thread:
1. 新建工程,配置好leakCanary環境
2. 直接在MainActivity新增如下程式碼:
紅色方框內的程式碼,可能每個人都這樣寫過。
OK ,我們執行一下,然後做如下操作:
1 MainActivity頁面開啟後,在20秒內點選手機返回鍵
2. 等待10秒
操作完成,leakCanary檢測出記憶體洩漏。
分析原因:和上面幾個案例的原因類似,不知不覺又搞了一個匿名內部類Runnable,
上面程式碼中,自定義了靜態的內部類MyRunable,實現了Runable ,然後在使用的時候例項化它。
執行程式碼後做如上相同操作,發現leakCannary沒有檢測出記憶體洩漏。
二. 資源未關閉造成的記憶體洩漏
對於使用了BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap等資源的程式碼,應該在Activity銷燬時及時關閉或者登出,否則這些資源將不會被回收,造成記憶體洩漏。
總結: