Android開發 使用單例模式內存泄露及解決辦法

Android開發 單例模式導致內存泄露

存在內存泄露問題的一些代碼片段像下面這樣:

2. public class Util {

3.

4. private Context mContext;

5. private static Util sInstance;

6.

7. private Util(Context context) {

8. ? this.mContext = context;

9. }

10.

11. public static Util getInstance(Context context) {

12. ? if (sInstance == null) {

13. ? ? sInstance = new Util(context);

14. ? }

15. ? return sInstance;

16. }

17.

18. //other methods

19. }

假設Activity A里使用Util類:

Util.getInstance(this);

代碼大意就是這樣,這樣寫的問題就是,在Activity A里使用Util類,傳入的context是actvitiy-context。試想一下,當Activity A生命周期結束,但Util類里面卻還存在A的引用(mContext),這樣Activity A占用的內存就一直不能回收,而A的對象也不會再被使用。本人寫代碼測試過,在A中調用了finish(),A的destroy()方法也被執行了,但其占用的內存,比如說,ImageView占用的內存,還是不能釋放的。

那么如何解決這個問題呢?在A中,可以用Util.getInstance(getApplicationContext());或Util.getInstance(getApplication());代替。

因為Application的生命周期是貫穿整個程序的,所以Util類持有它的引用,也不會造成內存泄露問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容