一、ActivityThread绑定looper
在ActivityThread中Looper.prepareMainLooper();将主线程初始化为一个Looper主线程。这时候我们的主线程就成了一个就是循环
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
工作的主线程。
二、作用与意义:
在程序开发中,我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完就继续等待下一个任务,这就是我们looper线程作
用。
三、根据查阅源码得出个人小结:
Looper中有个prepare(boolean b)的方法,传参true表示初始化一个可以被可以调用Looper.quit()在quit()里面传一个参数true,
调用MessageQueue消息队列类中通过对象调用quit(boolean safe)方法,执行removeAllFutureMessagesLocked();方法和
nativeWake(mPtr);结束looper死循环。
相反,Activity的主线程初始化looper时调prepare(boolean b)传了一个false进去,根据以上逻辑是,不能结束looper死循环的,如
果尝试结束,他会抛一个异常"Main thread not allowed to quit." 即主线程无法退出quit循环,
五、资料查阅视图跟踪