handler
文章平均质量分 67
Alrict
专职于android开发,欢迎各路大神前来斧正
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程的消息屏障
消息分类 参考文章 Handler之消息屏障 消息可以分为三种 普通消息(同步)normal 屏障消息(同步)barrier 异步消息async 我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息,因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。 我们如何在消息队列中插入一个消息屏障? postSyncBarrier原创 2021-12-04 16:11:39 · 446 阅读 · 0 评论 -
应用的主线程进入loop循环,为什么不会发生ANR?
ANR的触发原理 ANR:App not responding mUiHandler是systemService的handler,但是不在主线程,而是在子线程(刷新ui不一定需要在主线程) 触发ANR的场景: Service timeout BroadcastQueue timeout ContentProvider timeout InputDispatching timeout(输入事件无响应) 应用的大致启动流程 应用主线程的消息循环: 哪些线程可能会给主线程发送消息原创 2021-12-04 14:58:14 · 1954 阅读 · 0 评论 -
IdleHandler原理
IdleHandler是什么?有什么用?怎么用? 是什么? 是个回调接口。当发现这个线程阻塞等待消息的时候就会触发这个回调 queueIdle()返回值是boolean。当messageQueue里面的所有消息都处理完了或者等待下一条消息的时候(触发时机还没到)会触发。当return true,表示IdelHandler一直有效,false表示这个IdelHandler要被移除。 怎么用? 当return true,表示IdelHandler一直有效,false表示这个IdelHandler要被移原创 2021-12-04 12:14:51 · 524 阅读 · 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 · 2147 阅读 · 0 评论 -
Android线程间的消息传递机制
android的线程间的通信可以理解成三个部分:消息的发送、消息的循环、消息的分发处理 消息是怎么发送的? 核心是理解sendMessage()里面做了哪些操作 handler.sendMessage() handler.sendMessageDelayed() handler.sendMessageAtTime() 需要注意的是,sendMessageAtTime不是指要在这个时间插入这条消息,而是在这个时间将该消息分发出去 handler.enqueueMessage() message.原创 2021-12-03 12:23:29 · 1759 阅读 · 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 · 535 阅读 · 0 评论
分享