Handler发送信息方法的区别
2015-11-24 14:29
399 查看
sendEmptyMessage(intwhat)与sendMessage(Messagemsg)的区别
系统源码查看比较
publicfinal boolean sendEmptyMessage(int what)
{
return sendEmptyMessageDelayed(what, 0);
}
就是调用了sendEmptyMessageDelayed()而已,下面看下这个方法:
publicfinal boolean sendEmptyMessageDelayed(int what, long delayMillis){
Message msg = Message.obtain();
msg.what = what;
return sendMessageDelayed(msg, delayMillis);
}
而sendMessage(Messagemsg)的实现和上面一样,请看:
publicfinal boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}
原来在sendEmptyMessageDelayed中就是构建了一个Message,然后把这个Message的what设置成sendEmptyMessage方法中的What参数即可。
一切恍然大悟!
然后,在主线程中,Looper类的loop()通过 调用:msg.target.dispatchMessage(msg),调用Hanler类的dispatchMessage(Messagemsg)方法,从而在主线程中处理了这个Message.
系统源码查看比较
publicfinal boolean sendEmptyMessage(int what)
{
return sendEmptyMessageDelayed(what, 0);
}
就是调用了sendEmptyMessageDelayed()而已,下面看下这个方法:
publicfinal boolean sendEmptyMessageDelayed(int what, long delayMillis){
Message msg = Message.obtain();
msg.what = what;
return sendMessageDelayed(msg, delayMillis);
}
而sendMessage(Messagemsg)的实现和上面一样,请看:
publicfinal boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}
原来在sendEmptyMessageDelayed中就是构建了一个Message,然后把这个Message的what设置成sendEmptyMessage方法中的What参数即可。
一切恍然大悟!
然后,在主线程中,Looper类的loop()通过 调用:msg.target.dispatchMessage(msg),调用Hanler类的dispatchMessage(Messagemsg)方法,从而在主线程中处理了这个Message.
相关文章推荐
- markdown编辑器实现笔记
- 利用@media screen实现网页布局的自适应
- 解决Android SDK下载和更新失败的方法
- git pull
- Oracle 分页查询的 SQL 语句
- 小世界网络
- 立即自执行函数和分组操作符
- 由九度1502引出的对二分查找的一点总结v1.0
- 注册IIS
- log4j配置
- 使用局部索引来提升 PostgreSQL 的性能
- Sublime Text(转移)
- jQuery插件实现无缝滚动特效
- 通达OA系统故障解决案例记录
- JdbcTemplate.CLASS
- 通达OA系统故障解决案例记录
- 【Quick 3.3】资源脚本加密及热更新(三)热更新模块
- openssh之 openssh.spec
- cocos2d-x开发学习笔记(一)
- Comparison method violates its general contract!