ThreadLoca(二)Looper中ThreadLocal的使用

Posted zhangjin1120

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadLoca(二)Looper中ThreadLocal的使用相关的知识,希望对你有一定的参考价值。

ThreadLocal(一)设计ThreadLocal的目的
ThreadLoca(二)Looper中ThreadLocal的使用



 ThreadLocal在android中的应用,就是在Looper类中。
 Looper的使用,可以参考这篇:Android 两个子线程来回通信!,核心代码是:

void run()
	Looper.prepare(); //初始化Lopper
	handler.sendMsg();
	Looper.loop(); //循环遍历消息队列

看看prepare()方法:

prepare方法,初始化了一个Looper对象,放在ThreadLocal中。如果ThreadLocal中,已经有了,就会抛出运行期异常。这样,就实现了一个线程中,只有一个looper对象。

 那在哪里取出这个Looper对象了?在myLooper方法中:

不出意料的化,在Looper.loop()方法中,要用到myLooper(),看看looper()方法:

    public static void loop() 
        final Looper me = myLooper();//确实用到了
        if (me == null) 
            throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
        
        final MessageQueue queue = me.mQueue;
		...
		...

        boolean slowDeliveryDetected = false;

        for (;;) 
            Message msg = queue.next(); // might block
            if (msg == null) 
                // No message indicates that the message queue is quitting.
                return;
            

            // This must be in a local variable, in case a UI event sets the logger
            final Printer logging = me.mLogging;
            ...
        
    

Looper对象为什么要存在ThreadLocal中?
ThreadLocal在实际项目中的应用
线程封闭与ThreadLocal
正确理解Thread Local的原理与适用场景

以上是关于ThreadLoca(二)Looper中ThreadLocal的使用的主要内容,如果未能解决你的问题,请参考以下文章

Android面试 Handler机制

Looper.prepare()和Looper.loop()

Android ThreadLocal类浅析

Looper工作原理

Looper: Looper,Handler,MessageQueue三者之间的联系

Android中的Looper类