PHP中文网2017-04-17 15:03:49
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;
参考:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/app/ActivityThread.java
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/app/Activity.java
Android应用程序进程启动过程的源代码分析 - by 罗升阳
Android_Message_Handler_消息处理机制总结笔记