handler message looper机制(二)
来源:互联网 发布:java数据结构视频 编辑:程序博客网 时间:2024/06/05 04:25
handler message looper机制(二)
在handler message looper一文中,我们已经大概了解了这三者之间的关系。本篇文章在此基础上详细介绍Looper循环的流程以及post()和sendMessage()之间的区别。
目录
- handler message looper机制二
- 目录
- Looper循环之loop方法
- post以及sendMessage系列方法的区别
- 目录
Looper循环之loop()方法
我们知道,对于线程的Looper,需要严格执行prepare()–>looper()流程。
对于主线程,线程执行之初,Looper就已经自己生成了一个Looper。我们可以在ActivityThread.java中的main方法中找到
Looper.prepareMainLooper();...Looper.loop();
里面所执行的代码就是
//Initialize the current thread as a looperpublic static void prepareMainLooper(){ prepare(false); synchronized(Looper.class){ if(mMainLooper != null) ... sMainLooper = myLooper(); }}
在Looper.java的loop()中就会去不断地读取消息队列。
对于非主线程,就需要我们自己手动地创造looper以及执行loop()方法
//子线程的Handler,Looper Looper.prepare(); handler.sendMessage(); Looper.loop();
post()以及sendMessage()系列方法的区别
从代码中我们可以看到,两者最终都会调用到sendMessageAtTime(Message msg ,long time);
两者的区别在于,在post方法中,有一个Runnable对象r,而这个对象r就是消息message.callback属性,这在后面的loop中将会用作判断条件。
public final boolean post(Runnble r){ return sendMessageDelayed(getPostMessage(r),0);}
private static Message getPostMessage(Runnable r){ Message m = Massage.obtain(); m.callback = r; return m;}
在loop()中,所有消息最后都会被dispatchMessage(Mesage msg)方法来处理
public void dispatchMesasage(Message msg){ if(msg.callback != null){//post方法发出的消息 第一种情况 handleCallbck(msg); }else{ //sendMessage发出的消息 第二种情况 if(mCallback != null){ if(mCallback.handeMessage(msg)){ return; } } handleMessage(msg);//我们熟悉的回调方法 }}
其中,第二种情况又分为两种,mCallback是否为0。mCallback是在Hander构建的时候赋值的。
public Handler(Callback callback,boolean async){ ... mCallback = callback; mAsynchronous = async; ...}
public Handler(){ Hander(null,false);}
明白了吧。我们平时用的无参的构造函数默认没有回调。所以直接走handleMessage。否则走mCallback.handeMessage(msg)。
而对于post发送的message,会走handleCallbck()流程
private static void handleCallback(Message message){ message.callback.run();//这里就会执行最开始我们post(Runnable r)中r的任务。}
未完待续。。。
0 0
- handler message looper机制(二)
- handler message looper机制
- handler:message:looper机制
- Handler Looper Message(二)
- Android Handler Message Looper 机制
- Android的Message机制---Handler、Message、Looper
- Android Handler Looper Message工作机制
- Android Handler Message Looper机制原理
- android消息处理机制(Looper,Handler,Message)
- Handler、Message、Looper、MessageQueue消息队列机制
- Android中的Handler,Looper,Message机制
- 消息机制--Message.Handler与Looper(1)
- 消息机制--Message.Handler与Looper(2)
- android消息机制 Message, Looper,Handler
- Android Handler Message Looper机制原理
- Android中的Handler,Looper,Message机制
- Thread,Looper,Handler,Message协作机制
- android消息机制:Looper,Handler,Message
- Java控制语句和冒泡排序练习
- 练习
- peeqo
- 我排第几个
- (牛客网)双核处理
- handler message looper机制(二)
- 排序方法
- 安卓IPC(进程间通信)之Messenger基本使用
- Verilog模块调用
- 栈的应用--括号匹配()
- Android 正式签名jks证书获取SHA1
- 下载安装MyEclipse的步骤
- 最短路练习6 /poj/3259 Wormholes 有负环
- 微信开发接入获取用户信息