Handler/Looper/MessageQueue

  • ThreadLocal对象是一种特殊的全局变量,因为他的“全局”性只局限于自己所在的线程
  • Looper创建时,消息队列也同时被创建出来
final MessageQueue mQueue;
private Looper(boolean quitAllowed){
    mQueue = new MessageQueue(quitAllowed);
    mRun = true;
    mThread = Thread.currentThread();// Looper与当前线程建立对应关系
}

HandlerLooperMessageQueue建立联系

public Handler(){
/*省略部分代码*/
    mLooper = Looper.myLooper();// 通过sThreadLocal.get()来获取当前线程中的Looper实例
    mQueue = mLooper.mQueue;// mQueue是Looper与Handler之间沟通的桥梁
    mCallback = callback;
}
/**
     * Return the Looper object associated with the current thread.  Returns
     * null if the calling thread is not associated with a Looper.
     */
    public static @Nullable Looper myLooper() {
        return sThreadLocal.get();
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容