Android面试一问一答:Handler内存泄漏
2019-01-10 本文已影响7人
LvStudio
Handler为什么会内存泄露
- Handler会持有Activity的引用,如果有Message没有被处理或者没有处理完,由于Message会持有Handler的引用,所以造成生命周期长的对象持有生命周期短的对象的引用,从而Activity和Handler不能被释放,造成内存泄露。
如果Message处理完之后,这些内存可以被回收吗
- Message处理完之后,Message就不能被GC Root的可达性搜索查找到,失去关联关系,这一连串内存都会被回收。
常见的GC Root有哪些
-
通过System Class Loader或者Boot Class Loader加载的class对象,通过自定义类加载器加载的class不一定是GC Root
-
处于激活状态的线程
-
栈中的对象
-
JNI栈中的对象
-
JNI中的全局对象
-
正在被用于同步的各种锁对象
-
JVM自身持有的对象,比如系统类加载器等。