android: Context引發的內存泄露問題

 

錯誤的使用Context可能會致使內存泄漏,典型的例子就是單例模式時引用不合適的Context。this

public class SingleInstance {
    private static SingleInstance sSingleInstance;
    private Context mContext;

    public SingleInstance(Context mContext) {
        this.mContext = mContext;
    }

    public static SingleInstance getInstance(Context context){
        if(sSingleInstance==null){
            sSingleInstance=new SingleInstance(context);
        }
        return sSingleInstance;
    }
}
若是使用getInstance傳入的是Activity或者Service的實例,那麼因爲在應用退出以前建立的單例對象會一直存在並持有Activity或者Service的引用,回使Activity或者Service沒法被垃圾回收從而致使內存泄漏。正確的作法是使用Application Context對象,由於它的生命週期是和應用一致的。
public class SingleInstance {
    private static SingleInstance sSingleInstance;
    private Context mContext;

    public SingleInstance(Context mContext) {
        this.mContext = mContext;
    }

    public static SingleInstance getInstance(Context context){
        if(sSingleInstance==null){
            sSingleInstance=new SingleInstance(context.getApplicationContext());//使用Application Context
        }
        return sSingleInstance;
    }
}
相關文章
相關標籤/搜索