前言
以前看到handler的記憶體洩漏問題,沒當回事。但是作為優雅的程式員,怎麼能放過這種問題呢?
是以就來解決一下。
解決辦法
兩步:
第一步:static
第二步:.弱引用
也就是這些代碼:
static class MyHandler extends Handler
{
WeakReference<Activity> mWeakReference;
public MyHandler(Activity activity)
{
mWeakReference=new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg)
{
final Activity activity=mWeakReference.get();
if(activity!=null)
{
if (msg.what == )
{
//就是switch什麼的UI操作了
}
}
}
}
總結
感覺這是最優雅的方法了。
但是有的網友有這樣的問題
if(activity!=null)
{
if (msg.what == )
{
doSomeThingAboutActivity();
}
}
會不會當我執行doSomeThingAboutActivity()的時候實際對象被回收了了,導緻出現空指針錯誤?
經過跟群友的讨論,我們一緻認為不會的。即使弱引用,如果她正在運作也不會回收,在運作結束後,需要的時候再去回收。純屬個人觀點。批評斧正,感謝之至
參考文章:https://www.cnblogs.com/xujian2014/p/5025650.html