9.2

  • Looper不断获取MessageQueue中的Message,交由Handler处理
    • MessageQueue内包含Runnable与Message,Message内保存相同类型的Object
    • MessageQueue队列为空后Looper进入休眠
  • Handler
    • 每个Thread对应一个Looper、每个Looper对应一个MessageQueue、MessageQueue内有多个Message、每个Message对应1个Handler、每个MessageQueue可以对应多个Handler
    • Handler作用:
      • 处理Message(Handler.dispatchMessage派发消息或handleMessage将Message分发给责任人)
      • 将Message压入MessageQueue中(程序的有序性,根据优先级决定处理事件的先后顺序)
    • Handler()初始函数中获取当前线程中Looper实例,并将其对应的MessageQueue(mLooper.mQueue)赋给Handler对应MessageQueue(mQueue)
  • MessageQueue
    • 队列结构,队内数据通过指针排序
  • Looper
    • Looper类中含sThreadLocal静态全局变量,一旦import即创建完成
    • Looper.prepare根据保存的模板类sThreadLocal得到返回的Looper
    • ThreadLocal范围仅限于自己所在线程,每个线程Looper是独立的
 class ThreadTest extends Thread{
      public Handler mHandler;
      public void run(){
            Looper.prepare();//
            mHandler = new Handler(){//
                public void handleMessage(Message msg){
                   ...... 
                }
            };
            Looper.loop();//进入循环
      }
  }

你可能感兴趣的:(9.2)