Android Handler传递的对象,Message中的Runnable回调
来源:互联网 发布:一叶落而知秋为什么余 编辑:程序博客网 时间:2024/06/05 23:08
问题:Handler中传递的是什么, post(Runnable r) 和sendMessage(Message msg) 的区别
分析:Looper和MessageQueue一一对应,创建一个Looper的同时,会创建一个MessageQueue。而Handler与它们的关系,只是简单的聚集关系,即Handler里会引用当前线程里的特定Looper和MessageQueue。因此,Handler是在主线程还是在子线程处理消息,主要看创建Handler的Looper是主线程还是子线程。
Handler中传递的是message对象,查看post(Runnable r)方法源码:
public final boolean post(Runnable r) { return sendMessageDelayed(getPostMessage(r), 0); }
private static Message getPostMessage(Runnable r) { Message m = Message.obtain(); m.callback = r; return m; }
可以看到,最终传递的还是Message对象
那么问题来了,如果一个handler 重写了handleMessage(Message msg)方法,并且用post(Runnable r)来发送消息,那么handleMessage(Message msg)方法中的代码能执行吗?看Handler是如何分发消息的:
/** * Handle system messages here. */ public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } }
private static void handleCallback(Message message) { message.callback.run(); }
可以看到,当处理的message对象有callback对象时,执行callback的run方法。
1 0
- Android Handler传递的对象,Message中的Runnable回调
- Android 开发中的 Handler ,Thread ,Message ,Runnable 的综合使用方法
- android 中的 Handler Thread Runnable 的理解
- Android - Handler、Looper、Thread、Message、Runnable
- Android Handler Runnable Message Thread 简单用法
- android 基础 handler message runnable thread looper
- Android Handler Message 传递字符串
- Handler.post(Runnable runnable)中的Runnable对象去哪里了?
- Handler Runnable Message
- Handler,Message,Runnable
- Handler&Message&Runnable
- Android中的Handler的post(Runnable(){})方法的线程
- Java中的多线程Thread Runnable及android的handler
- Android应用开发多线程基础之Handler,Looper,Message,MessageQueue,Runnable之间的关系
- Android学习碎片(三)——Handler、Message、Runnable之间的联系①
- [图例]详解Android Thread管理(Handler、Looper、Message、Runnable)
- 理解Android中的Handler/Message
- Android中的Looper , Handler , Message
- redis练习手册<十三>Redis发布订阅
- spring的事务控制
- iOS App名称和内容国际化
- zookeeper入门与实战
- thinkPhp 框架学习——架构
- Android Handler传递的对象,Message中的Runnable回调
- 利用Google浏览器自定义搜索
- C#实现自己的Ctr+V
- poj2195(KM)
- 对于javascript中Null和Undefined类型的区分
- MYSQL事务避免脏读、不可重复读、幻读
- mysql 错误集锦
- Viewpage的.setCurrentItem 导致UI线程的执行阻塞问题 广告轮播 数据加载后填充viewpagerAdapter
- Problem1(Multiples of 3 and 5)