android应用是由activity组成的,应用的启动过程其实就是某个activity的启动过程,是哪个activity呢,没错,就是你想的那样,是这个:
应用启动其实就是启动manifest中指定为MAIN的activity四八四很熟悉,最初的感动啊,那么让我们继续。
1 指定为main,其实说白了就是有了java中的应用程序入口main()。
2 从main()方法开始执行
启动源码从图中可以看出,进入到main()方法后,首先会获取一个Looper对象,Looper对象会获取一个MessageQueue对象,也就是说,一个系统会为一个应用维护一个Looper和MessageQueue。
创建activityThread,也就是应用程序主线程。主线程承载着Looper和MessageQueue的运作。
在主线程中,MessageQueue是一个消息队列,Looper管理这个队列,也就是说当程序一经启动,就进入到了一个无限循环当中。
Looper管理着MessageQueue,控制着Message在MessageQueue的出入,handler通过sendMessage可以把一个Message放入到MessageQueue当中,也可以使用handleMessage来获取MessageQueue的一个Message。(入队:queue.enqueueMessage(msg, uptimeMillis),出队:msg.next。)。
在进行耗时操作的时候,为了不阻塞主线程,都会开启子线程,子线程和主线程最常见的交互就是更新UI,因为UI是运行在主线程中的,所以子线程是无法操作的,这是可以通过handle把消息传递到主线程,从而进行相应操作,当然还有其他方式。
启动应用程序时,创建了线程之后是的looper循环起来才能通过handler传递消息才能完成Application的主线程创建的。
参考了:http://www.jianshu.com/p/36a978b6cacc,感谢作者。
网友评论