为什么Android系统会给程序的主线程自动添加Looper
Android 在进程的入口函数 ActivityThread.main()中,调用 Looper.prepareMainLooper, 为应用的主线程创建Looper,然后调用Looper.loop()就启动了进程的消息循环,然后就可以处理消息了。
ActivityThread源码:
151 public final class ActivityThread {
2202 private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
2253 if (activity != null) {
2259 activity.attach(appContext, this, ..., );
5219 public static void main(String[] args) {
// 在这儿调用 Looper.prepareMainLooper, 为应用的主线程创建Looper
5240 Looper.prepareMainLooper();
5242 ActivityThread thread = new ActivityThread();
5245 if (sMainThreadHandler == null) {
5246 sMainThreadHandler = thread.getHandler();
5247 }
5254 Looper.loop();
5257 }
5258}
Looper源码:
52 public final class Looper {
// Initialize the current thread as a looper, marking it as an application's main looper.
// The main looper for your application is created by the Android environment,
// so you should never need to call this function yourself. See also: prepare()
87 public static void prepareMainLooper() {
88 prepare(false);
89 synchronized (Looper.class) {
90 if (sMainLooper != null) {
91 throw new IllegalStateException("The main Looper has already been prepared.");
92 }
93 sMainLooper = myLooper();
94 }
95 }
Activity源码:
660 public class Activity extends ContextThemeWrapper {
699 /*package*/ ActivityThread mMainThread;
5922 final void attach(Context context, ActivityThread aThread, ..., ) {
5944 mMainThread = aThread;