1.Handler全解
Handler全解
Handler的码详作用是发送并处理一个线程关联的Message或Runable。
在UI线程中创建Handler,码详在子线程中发送消息。码详
Looper从ActivityThread类开始分析,码详狂风源码40级源码双生ActivityThread并不是码详线程,而是码详开启主线程的类。Looper构造方法中创建了MessageQueue对象,码详保证了一个线程只对应一个MessageQueue对象。码详Looper死循环不断检查MessageQueue是码详否有可处理的消息,将消息分发给Handler处理。码详
Looper死循环的码详头条源码目的是防止线程退出,保证UI刷新和生命周期回调的码详完成,使用死循环实现不消耗过多资源,码详通过Linux pipe/epoll机制让线程进入休眠状态,码详释放CPU资源,码详等待被唤醒。源码排行
唤醒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的使用和原理,了解这些机制可以更好地管理线程和消息处理。
2024-12-22 23:302604人浏览
2024-12-22 23:05396人浏览
2024-12-22 22:471950人浏览
2024-12-22 22:331421人浏览
2024-12-22 21:53371人浏览
2024-12-22 21:461424人浏览
中国消费者报杭州讯记者郑铁峰)指导整改“问题”格式条款861条,依法清除“霸王条款”179条,培育放心消费商圈街区)485个,635家农贸市场完成改造提升,发展了9.7万家无理由退换货单位……记者近日
1.主力资金进出指标公式源码2.主力状态指标公式3.主力进出指标公式源码主力资金进出指标公式源码 主力资金进出指标公式源码为: 主力资金流入 = 外盘成交 - 内盘成交 + 收盘价与开盘价之差