2013.08.21(2)——— android Handler+Looper+MessageQueue
参考:http://www.cnblogs.com/codingmyworld/archive/2011/09/14/2174255.html
http://www.cnblogs.com/xirihanlin/archive/2011/04/11/2012746.html

明确:
looper和messageQueue是线程唯一的,Looper和ThreadLocal绑定的

0、Looper+MessageQueue
Android主线程就是Looper线程,默认调用了
Looper.prepare();//将一个Looper实例对象和ThreadLocal绑定,构造函数里面创建一个MessagequeueLooper.loop();//while(true)循环读取MessageQueue


1、new Handler()
主线程创建handler,handler内部会得到创建时线程绑定的looper和messagequeue作为局部变量

2、handler.sendMessage()
这个在工作线程调用,handler内部会将这个message加入到messagequeue里面去,并设定
msg.target = this
,将handler传递给message,以便以后用该handler来处理message

3、loop
loop循环从队列中得到了一个Message,然后判断targe是不是为null,调用
msg.target.dispatchMessage(msg);
传递给Handler来处理消息

4、dispatchMessage

public void dispatchMessage(Message msg) {        if (msg.callback != null) {            handleCallback(msg);        } else {            if (mCallback != null) {                if (mCallback.handleMessage(msg)) {                    return;                }            }            handleMessage(msg);        }    }


非常短,可以看出来 这就是我们实现handlerMessage方法的原因了 呵呵
当然还有一个handlerCallback分支
这个是处理post请求的 就是传递了一个Runnable对象的,然后会把msg.callback设置为传进来的Runnable对象
private final void handleCallback(Message message) {        message.callback.run();    }


看清楚了 是run方法 不是start方法哦


总结下:

当sendMessage后,message就加入到主线程的MessageQueue里面了,就实现了线程切换,当主线程loop到后 就发给主线程穿件的Handler处理




更多相关文章

  1. 浅析Android中的消息机制-解决:Only the original thread that cr
  2. Android异步消息机制之Handler
  3. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  4. Android之Handler用法总结
  5. Android开发之消息处理机制(一)——Handler
  6. Android异步加载图像小结 (含线程池,缓存方法)
  7. android 面试题集
  8. Android(安卓)数据绑定视图 dataBinding
  9. [Innost]Android深入浅出之Binder机制

随机推荐

  1. Android横竖屏切换总结(Android资料收藏)
  2. Android 弱引用
  3. Android NDK下载:Download Android 1.5 ND
  4. Android(安卓)悬浮窗 (附圆形菜单悬浮窗)
  5. Android 进度条
  6. How Android Draws Views
  7. android图片放大 缩小 旋转
  8. Layout1.9
  9. Android usb 驱动
  10. Android 查看本机外网IP