【原生settings源码】【棋牌社区源码】【api测试源码】AndroidThread源码详解

2025-01-19 11:06:20 来源:编程源码课 分类:综合

1.Handler全解

AndroidThread源码详解

Handler全解

       Handler的码详作用是发送并处理一个线程关联的Message或Runable。

       在UI线程中创建Handler,码详在子线程中发送消息。码详

       Looper从ActivityThread类开始分析,码详原生settings源码ActivityThread并不是码详线程,而是码详开启主线程的类。Looper构造方法中创建了MessageQueue对象,码详保证了一个线程只对应一个MessageQueue对象。码详Looper死循环不断检查MessageQueue是码详否有可处理的消息,将消息分发给Handler处理。码详

       Looper死循环的码详棋牌社区源码目的是防止线程退出,保证UI刷新和生命周期回调的码详完成,使用死循环实现不消耗过多资源,码详通过Linux pipe/epoll机制让线程进入休眠状态,码详释放CPU资源,码详等待被唤醒。api测试源码

       唤醒Looper的消息来自于创建ActivityThread后,通过thread.attach(false)方法接收系统服务AMS发送的事件,通过sendMessage方法将消息发送给AndroidThread的Handler实现内部类H,完成ActivityThread到UI线程的切换。

       MessageQueue插入和读取操作通过enqueueMessage和next方法实现,无限重启源码使用单链表维护消息,方便插入和删除。nativePollOnce方法在没有消息或等待时间不到时,将线程设置为等待状态,直到获取到下一个Message。springcloud源码工程

       Looper的loop方法死循环是为了无限读取MessageQueue的Message,next方法死循环是为了读取延迟的Message消息,计算需要等待的时间,让线程等待。

       Handler构造方法利用threadLocal线程相关性获取当前线程对应的Looper,Handler对象将自己的引用放入msg中,通过enqueueMessage中的nativeWake唤醒等待线程,最终在Handler的dispatchMessage方法处理消息。

       在子线程中创建Handler需要注意退出时机,避免子线程一直处于等待状态。Looper.quit方法退出后,发送的消息会失败,子线程也应手动调用quit方法终止。

       Handler全解涵盖了Handler、Looper、MessageQueue的使用和原理,了解这些机制可以更好地管理线程和消息处理。

更多资讯请点击:综合

热门资讯

flappybirdpython源码

2025-01-19 10:141625人浏览

maccmsapp源码

2025-01-19 09:54535人浏览

rogue源码

2025-01-19 09:491138人浏览

dnfqe源码

2025-01-19 09:032707人浏览

推荐资讯

日本茨城縣近海發生3.9級地震

據日本氣象廳消息,當地時間10月27日12時32分左右,日本茨城縣近海地區發生3.9級地震,最大震感為震度3,震源深度50公里。來源:央視新聞)責任編輯: 孫佳藝