Android内存优化-方式十一:避免Handler导致的内存泄露

Android内存优化-方式十一:避免Handler导致的内存泄露_第1张图片
Android内存优化-方式十一:避免Handler导致的内存泄露_第2张图片

它默认是可以使用外部类的成员变量的,这样也佐证了我们所说的它会隐式的持有外部类的引用;
这时候如果子线程使用handler将message消息发送到messageQueue中并等待执行的过程过长(具体异步消息相关的内容可以查看:http://blog.csdn.net/qq_23547831/article/details/41697039),这时候activity已经执行finish方法;
那么我们希望的是activity被执行onDestory方法,然后activity相关的各种资源,组件都被销毁掉,但是由于handler隐式的持有activity的引用,那么activity就无法被回收,activity相关的资源与组件也无法被回收–即内存已经泄露。

Android内存优化-方式十一:避免Handler导致的内存泄露_第3张图片

这样的话,handler对象由于是静态类型无法持有外部activity的引用,但是这样Handler不再持有外部类的引用,导致程序不允许在Handler中操作activity中的对象了,这时候我们需要在Handler对象中增加一个对activity的弱引用;
.
.
Android内存优化-方式十一:避免Handler导致的内存泄露_第4张图片

你可能感兴趣的:(Android内存优化,Android内存和性能优化)