为什么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。