我们在项目项目中使用Handler是为了更新ui,我们在主线程中创建Handler对象,在子线程中处理一些耗时操作,handler通过发送message或者post(runnable)的方式,让主线程更新ui。
因为子线程中是一个耗时操作,比如在访问网络请求的过程中,我把该Activity关闭了,但是这时候Handler仍然存有该该页面的引用。这样就导致该activity无法被回收,就会造成内存泄漏。
解决方法之一就是把Handler改成持有该Activity的弱引用,并把类声明为static,静态类不持有外部类的对象,所以你的Activity可以随意被回收
代码如下:

我们进入WeakReference的源码,看看WeakReference的描述信息

翻译过来也就是弱引用不会阻止引用对象被终止或是回收
还有我们在MVP的架构项目中,在P成也会用到WeakReference,实例如下

网友评论