皮皮网

【庄河耐用的源码出售】【养生推拿网站源码】【拦截短信app源码】AndroidThread源码详解

来源:jndi源码 时间:2024-12-23 19:14:46

1.Handler全解

AndroidThread源码详解

Handler全解

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

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

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

       Looper死循环的码详养生推拿网站源码目的是防止线程退出,保证UI刷新和生命周期回调的码详完成,使用死循环实现不消耗过多资源,码详通过Linux pipe/epoll机制让线程进入休眠状态,码详释放CPU资源,码详等待被唤醒。拦截短信app源码

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

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

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

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

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

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