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類持有它的引用,也不會造成內存泄露問題。