![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
handler
文章平均质量分 67
Alrict
专职于android开发,欢迎各路大神前来斧正
展开
-
线程的消息屏障
消息分类参考文章 Handler之消息屏障消息可以分为三种普通消息(同步)normal屏障消息(同步)barrier异步消息async我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息,因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。我们如何在消息队列中插入一个消息屏障?postSyncBarrier原创 2021-12-04 16:11:39 · 295 阅读 · 0 评论 -
应用的主线程进入loop循环,为什么不会发生ANR?
ANR的触发原理ANR:App not respondingmUiHandler是systemService的handler,但是不在主线程,而是在子线程(刷新ui不一定需要在主线程)触发ANR的场景:Service timeoutBroadcastQueue timeoutContentProvider timeoutInputDispatching timeout(输入事件无响应)应用的大致启动流程应用主线程的消息循环:哪些线程可能会给主线程发送消息原创 2021-12-04 14:58:14 · 1825 阅读 · 0 评论 -
IdleHandler原理
IdleHandler是什么?有什么用?怎么用?是什么?是个回调接口。当发现这个线程阻塞等待消息的时候就会触发这个回调queueIdle()返回值是boolean。当messageQueue里面的所有消息都处理完了或者等待下一条消息的时候(触发时机还没到)会触发。当return true,表示IdelHandler一直有效,false表示这个IdelHandler要被移除。怎么用?当return true,表示IdelHandler一直有效,false表示这个IdelHandler要被移原创 2021-12-04 12:14:51 · 330 阅读 · 0 评论 -
Handler消息延迟机制是怎么实现的?
消息延时是怎么实现的?消息队列按消息触发时间由近及远进行排序设置epoll-wait的超时间,使其在特定的时间唤醒(计算下一条消息的触发时间与当前时间的时间差作为epoll-wait的超时时间) sendMessageDelayed(Message msg,long delayMillis){ if(delayMillis < 0){ delayMillis = 0; } //当前时间+延时时间 = 目标触发时间 return sendMessageAtTime(msg,Sys原创 2021-12-03 15:30:01 · 1962 阅读 · 0 评论 -
Android线程间的消息传递机制
android的线程间的通信可以理解成三个部分:消息的发送、消息的循环、消息的分发处理消息是怎么发送的?核心是理解sendMessage()里面做了哪些操作handler.sendMessage()handler.sendMessageDelayed()handler.sendMessageAtTime()需要注意的是,sendMessageAtTime不是指要在这个时间插入这条消息,而是在这个时间将该消息分发出去handler.enqueueMessage()message.原创 2021-12-03 12:23:29 · 1621 阅读 · 0 评论 -
关于Handler的一些思考
这里写自定义目录标题关于Handler的一些思考1.在子线程中可以创建handler吗?2.主线程的Looper与主线程的Looper有什么区别3.Looper和MessageQueue有什么关系4.MessageQueue是如何创建的?关于Handler的一些思考1.在子线程中可以创建handler吗?答案是可以的//错误示例 new Thread(){ @Override public void run() { n原创 2021-12-02 22:50:02 · 428 阅读 · 0 评论