前言
以前看到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