本文主要是介绍Looper.prepare()方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
prepare方法
public static void prepare() {prepare(true);}
prepare又调用它的重载方法,并将true作为默认形参传入,如果线程未绑定Looper对象则调用sThreadLocal.set(new Looper(quitAllowed))方法。如果已经绑定则抛出一个异常信息“每一个线程只能绑定一个Looper对象”。
private static void prepare(boolean quitAllowed) {if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}//sThreadLocal.set(new Looper(quitAllowed))首先调用的是sThreadLocal.set()方法,以quitAllowed(也就是true)作为形参并调用Looper的有参构造然后传入一个Looper实例对象。sThreadLocal.set(new Looper(quitAllowed));
}
Looper的有参构造内以true作为形参传入并生成一个信息队列对象引用保存至mQueue成员变量,然后将当前线程引用保存至mThread成员变量。
private Looper(boolean quitAllowed) {mQueue = new MessageQueue(quitAllowed);mThread = Thread.currentThread();}
在MessageQueue有参构造中将quitAllowed(true)保存至mQuitAllowed成员变量。
MessageQueue(boolean quitAllowed) {mQuitAllowed = quitAllowed;mPtr = nativeInit();}
其实写到这里还是没有彻底弄明白,里面涉及了一些native的东西。先备注在这里以后懂了慢慢回头看。
这篇关于Looper.prepare()方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!