造成內(nèi)存泄漏的主要原因就是static對象的生命周期與其持有對象引用(即Activity)的聲明周期不同而造成的捣域,因此啼染,解決內(nèi)存的泄漏的方法有如下2種:
1,使用應(yīng)用程序的getApplicationContext()焕梅,靜態(tài)對象的生命周期與應(yīng)用程序的生命周期一致迹鹅,故此不會導(dǎo)致內(nèi)存泄漏。
2贞言,持有傳入的context的弱引用斜棚。如下所示:,
private WeakReference<Context> weakContext;
private SingleInstance(Context context)
{
weakContext = new WeakReference<Context>(context);
}
如果某個時間點,MainActivity被GC了该窗,由于持有的是MainActivity的弱引用弟蚀,不會影響系統(tǒng)對MainActivity的回收,那么context就被置空了酗失,所以后面要使用該context時义钉,就需要判斷一下該若引用持有的對象是否還存在:
weakContext.get() != null