为什么handler可能造成内存泄露

2020-08-09  本文已影响0人  小马奔腾走天下

非静态内部类,持有外部类的引用;

主要是因为 Message 持有 handler 的引用,handler持有activity的引用,导致GC无法回收activity。

javap 反编译查看class文件字节码, 内部类 持有外部类引用,可以访问外部类private 的属性。

外部类字节码反编译分析,属性会多出access$0  access$1 access$2 的构造方法,有多少个属性,就有多少个这样的方法。

然后,内部类,反编译查看,也多了对应访问的方法;

Message 对象有个Handler target属性;

msg.target.dispatchMessage(msg);

App启动时,会创建一个Looper,无限制循环读取message。

上一篇下一篇

猜你喜欢

热点阅读