靜態內部類解決內存泄漏


非靜態內部類導致內存泄漏主要原因:::App可能會因為大量的內存泄漏導致內存耗盡,引發Crash,如果內存耗盡,App會由於內存空間不足,出現頻繁的GC,每一次GC都是一個耗時阻塞操作,會造成設備卡頓。

          非靜態內部類中創建了一個靜態實例,導致該實例的生命周期和應用ClassLoader級別,又因為該靜態實例會隱式持有其外部類的引用,所以導致其外部類無法正常釋放,出現泄漏問題。

(classloader:用來動態加載某個class文件到內存當中,只有class被載入到內存中之后,才能被其他class所引用)

 

1.非靜態內部類會對外部類存在一個隱式引用            非靜態(匿名)內部類會持有外部類的引用,靜態內部類中未持有外部類的引用。

2.非靜態內部類中存在異步任務,可能導致其對應的外部類內存資源無法正常釋放        

3.非靜態內部類中創建了一個靜態實例,會導致內存泄漏

解決思路::::去掉隱式引用(靜態(匿名)內部類),手動管理對象引用(修改靜態內部類的構造方法,手動引入其外部類引用)當內存不可用時,不執行不可控代碼(Android 可以結合智能指針 ,WeakReference包裹外部類實例)

 

總結::::不是所有內部類只能使用靜態內部類,只有在該內部類中的生命周期不可控的情況下,采用靜態內部類。

多想想對象之間的引用關系。

           


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM