关于mIdleHandlers 空闲消息
模拟情况说明
创建一个handler对象 该handler持有的是主线程
1.先发送一个延时20秒的message what=35;
2.紧接着又发送一个延时10秒的Runnable
3.在该Runnable中的run方法中执行了添加一个空闲消息: handler.getLooper().myQueue().addIdleHandler(new MessageQueue. IdleHandler()
代码:
final Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
System.out.println("消息的what-->>"+msg.what);
return false;
}
});
public void testHandler(){
Message message = Message.obtain() ;
message.what=35;
//发送一个延时的20秒的消息
handler.sendMessageDelayed(message,20*1000L);
myListView.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("发送idel消息");
//发送一个空闲时执行的消息
handler.getLooper().myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
System.out.println("我是空闲消息");
return false;
}
});
}
},10*1000L);
}
************************************************************
这3个消息的执行过程:
MessageQueue 中成员变量 mMessages 消息列队模拟如下
message0( runnable) 10秒后执行
message1( what =35)的消息 20秒后执行
mIdleHandlers 空闲消息集合此时为空
当10秒后 message0 触发 ,此时在MessageQueue的成员变量mIdleHandlers中添加了 空闲消息
message0 执行完毕后 looper再次循环, 调用MessageQueue.next();
此时发现 message1 还有10秒才执行 所以执行了nextPollTimeoutMillis = (int) Math.min(msg.when - now, Integer.MAX_VALUE);
那么毫无疑问 nextPollTimeoutMillis =10秒钟了 关键是 代码继续执行, 就执行到了刚刚添加到mIdleHandlers中的空闲消息了
关于mIdleHandlers 空闲消息的更多相关文章
- 17.1-uC/OS-III消息管理(两种消息队列)
1.使用消息队列 消息队列函数: 函数名 功能 OSQCreate() 创建一个消息队列 OSQDel() 删除一个消息队列 OSQFlush() 清空一个消息队列 OSQPend() 任务等待消息 ...
- RT-thread内核之消息队列
一.消息队列控制块:在include/rtdef.h中 #ifdef RT_USING_MESSAGEQUEUE /** * message queue structure */ struct rt_ ...
- 继续学习freertos消息队列
写在前面:杰杰这个月很忙~所以并没有时间更新,现在健身房闭馆装修,晚上有空就更新一下!其实在公众号没更新的这段日子,每天都有兄弟在来关注我的公众号,这让我受宠若惊,在这里谢谢大家的支持啦!!谢谢^ 在 ...
- 【TencentOS tiny】深度源码分析(4)——消息队列
消息队列 在前一篇文章中[TencentOS tiny学习]源码分析(3)--队列 我们描述了TencentOS tiny的队列实现,同时也点出了TencentOS tiny的队列是依赖于消息队列的, ...
- 【LiteOS】LiteOS消息队列
目录 前言 链接 参考 笔录草稿 基本概念 队列运作机制 队列运作原理 消息队列传输方式 消息队列的阻塞机制 出队阻塞 入队阻塞 任务相关函数 任务开发流程 注意事项 * 实战 前言 链接 LiteO ...
- 队列Queue:任务间的消息读写,安排起来~
摘要:本文通过分析鸿蒙轻内核队列模块的源码,掌握队列使用上的差异. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十三 消息队列Queue>,作者:zhushy . 队列(Queue)是 ...
- 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 百篇博客分析OpenHarmony源码 | v33.02
百篇博客系列篇.本篇为: v33.xx 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁 ...
- C++ 非阻塞套接字的使用 (2)
继续话题——软件中的异步非阻塞通讯方式. 由于软件基于MFC开发,所以实现异步通讯时使用了CAsyncSocket类. 首先要了解CAsyncSocket异步机制,引用自 http://blog.cs ...
- WinForm 简单蒙版实现控件遮盖
在Web上面要实现一个遮罩层或者说是蒙版吧,有了DIV那不算什么难事,只要给div定好位置和大小,把颜色的Alpha值设一下就有透明的效果.不过在Winform中实现起来就没那么简单了事.尝试过用一个 ...
随机推荐
- windows2003可用gt630显卡驱动
http://file2.mydrivers.com/display/301.42-desktop-winxp-32-international-whql.exe 驱动精灵自动下载的不好用,这个版本可 ...
- dorado抽取js
dorado创建的视图文件如果有控件拥有事件的话,那么它是可以抽取js的, 右键视图->抽取JavaScript 然后就会出现一个同名的.js文件 (注意,所有的属性需要有id,因为js需要绑定 ...
- enum 与 #define
enum 与 #define 一.为什么既要有enum,又要define enum is derived from enumerate, from ex- + number,字面意思就是用数字排列,报 ...
- 08_rlCoachKin自主编译,调试
为了知道参数的意思,以及为了从头建立一个项目,我从使用QTCreator来单独建立项目(当然也可以直接使用源代码中建立好的VS项目). 其实也推荐 VS2010调试 如果是用自带的VS项目,那么我们需 ...
- jquery 100%全屏自适应宽可点击左右和焦点的自动切换幻灯片特效
http://www.divcss5.com/css-texiao/texiao717.shtml http://d.divcss5.com/divcss5/down/2014062201.zip
- object-c 1
多个参数的写法 (方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ; 举个例子,一个方法的定义: -(void) setKids ...
- 原创:Javascript循环队列类
需要滚动显示最多一定数量的信息,于弄了个这个 var LeesCircleQueue=function(size) { // 队列数组 var _queue=[]; // 队首索引 var _fron ...
- Python 多进程
import threading from time import sleep from msalt_proxy.client import Client def f(t): print t cli= ...
- hdu 4300 Clairewd’s message KMP应用
Clairewd’s message 题意:先一个转换表S,表示第i个拉丁字母转换为s[i],即a -> s[1];(a为明文,s[i]为密文).之后给你一串长度为n<= 100000的前 ...
- C++ 实现设计模式之观察者模式
1. 什么是观察者模式? 观察者模式(有时又被称为发布-订阅Subscribe>模式.模型-视图View>模式.源-收听者Listener>模式或从属者模式)是软件设计模式的一种.在 ...