参考: https://www.jianshu.com/p/733b1cc9b457
ActivityThread就是我们常说的主线程或UI线程,ActivityThread的main方法是整个APP的入口
MainLooper在它的main方法中被创建。
//ActivityThread的main方法
public static void main(String[] args) {
......
Looper.prepareMainLooper(); //创建MainLooper
ActivityThread thread = new ActivityThread();
//在attach方法中会完成Application对象的初始化,然后调用Application的onCreate()方法
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
......
Looper.loop(); //开启循环
throw new RuntimeException("Main thread loop unexpectedly exited");
}
Looper.loop()方法跑的是死循环, 为什么我们的Activity生命周期方法还能在主线程中运行?
看下面代码
framworks\base\core\java\android\os\Looper.java
Looper.loop()
public static final void loop() {
Looper me = myLooper();
MessageQueue queue = me.mQueue;
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
//开启死循环
while (true) {
//该方法是阻塞只到有新的消息到来
Message msg = queue.next(