使用WeakReference来解决Handler带来的内存泄漏

    我们在项目项目中使用Handler是为了更新ui,我们在主线程中创建Handler对象,在子线程中处理一些耗时操作,handler通过发送message或者post(runnable)的方式,让主线程更新ui。

    因为子线程中是一个耗时操作,比如在访问网络请求的过程中,我把该Activity关闭了,但是这时候Handler仍然存有该该页面的引用。这样就导致该activity无法被回收,就会造成内存泄漏。

解决方法之一就是把Handler改成持有该Activity的弱引用,并把类声明为static,静态类不持有外部类的对象,所以你的Activity可以随意被回收

代码如下:


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


翻译过来也就是弱引用不会阻止引用对象被终止或是回收

还有我们在MVP的架构项目中,在P成也会用到WeakReference,实例如下


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容