handler源码分析

1.一个线程可以有多个handler
2.一个线程只有一个looper,因为looper函数的初始化prepare方法中,会在threadlocal.set()中new一个looper函数,threadlocal内部创建<key,value>了一个数组通过i和i+1的方式存储<threadlocal,looper>,threadlocal不为空就不会再次创建looper,set方法中会调用value方法去获取每个线程的localvalue的值
3,handler内存泄漏的原因,内部类持有外部类的引用,默认会持有外部类的this,
为什么默认持有是因为message持有handler,handler持有了this
4.为什么主线程可以new handler,因为在activity的main函数启动就中调用了looper。prepare方法和loop方法,子线程中创建所以就必须调用prepare()和loop()
5.子线程中维护looper时,消息队列无消息的时候如何处理,调用looper的quit()方法,方法释放内存释放线程
6.handler通过synchronized来保证线程的安全,因此线程安全后和delay的时间可能会有不准确的地方,
synchronized可以修饰方法,静态方法,代码块
7,如何创建通过obtain来创建(因为内存共享)享元设计模式创建一个spool池最多50条消息
8,handler的postdelay后消息队列会发生什么,计算所需要的等待的时间然后继续睡眠
9.looper死循环为什么不会导致应用卡死,每一个事件及生命周期都是loop()里面的一个message,都在里面循环,当没有消息的时候main线程进入休眠状态,如果消息无法唤醒主线程就会出现anr,

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容