Looper: 循环处理消息队列

//用法:  class LooperThread extends Thread {        public Handler mHandler;                public void run() {            Looper.prepare();                        mHandler = new Handler() {                public void handleMessage(Message msg) {                    // process incoming messages here                }            };                        Looper.loop();        }    }//第一步,在TLS上创建一个Looper//TLS,thread local storage线程本地存储空间,也就是这个存储空间是和线程相关的,一个线程内有一个内部存储空间public static final void prepare() {          if (sThreadLocal.get() != null) {              throw new RuntimeException("Only one Looper may be created per thread");          }          sThreadLocal.set(new Looper());      }  /**     *  Run the message queue in this thread. Be sure to call     * {@link #quit()} to end the loop.     */// 从当前本地线程中得到loop对象,从中取出message队列,遍历其中的message并发送到其target// 注意msg.target.dispatchMessage(msg); public static final void loop() {        Looper me = myLooper();        MessageQueue queue = me.mQueue;        while (true) {            Message msg = queue.next(); // might block            //if (!me.mRun) {            //    break;            //}            if (msg != null) {                if (msg.target == null) {                    // No target is a magic identifier for the quit message.                    return;                }                if (me.mLogging!= null) me.mLogging.println(                        ">>>>> Dispatching to " + msg.target + " "                        + msg.callback + ": " + msg.what                        );                msg.target.dispatchMessage(msg);                if (me.mLogging!= null) me.mLogging.println(                        "<<<<< Finished to    " + msg.target + " "                        + msg.callback);                msg.recycle();            }        }    }// 再看看Handler中的该方法/**     * Subclasses must implement this to receive messages.     */    public void handleMessage(Message msg) {    }        /**     * 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);        }    }


参考:http://blog.csdn.net/Innost/article/details/6055793

更多相关文章

  1. android 刷新View
  2. Android-Handler的消息传递机制
  3. Android中的线程模型
  4. Android(安卓)开发技术周报 Issue#299
  5. Android(安卓)Java 中Thread与Runnable的区别
  6. java版android Handler机制模型
  7. Android(安卓)消息机制 你了解多少
  8. Android高级进阶之路【六】Android(安卓)Framework解析
  9. android 多线程下载原理

随机推荐

  1. Android(安卓)studio 动态fragment的用法
  2. Android的权限机制之—— “沙箱”机制sh
  3. Android更新UI用法AsyncTask
  4. Android入门
  5. Android(安卓)自定义view 基础篇(一)
  6. Android查看源码
  7. Android第一讲笔记(常用控件以及线性布局
  8. 在Android中使用FFmpeg(android studio环
  9. Android通过http协议POST传输方式
  10. Android(安卓)O添加Settings设置项的方法