首先我们分析一个app的启动过程,我们通过eclipse中debug来查看app启动时的调用栈信息,下面是截图:
我们看到,主线程的调用栈信息,我在mainActivity中的onCreate方法上打的断点,主线程停在了我的onCreate()方法,那么我们来分析分析app的启动过程,主线程先是调用ZygoteInit类的main(String[])方法,对就java属性的同学是不是特别属性,这个不就是java程序的入口么,其实App就是一个跑在linux系统上的,java程序,他用的虚拟机就是谷歌重写的JVM,谷歌叫它Dalvik。我们知道ZygoteInit类是在Zygote进程创建当前进程后,对被创建的进程初始化,然后来到倒数第四行,ActivityThread.mian(String[]),这是我们今天的主角,
我们来分析分析它的作用。
1、通过源码分析,我可以知道ActivityThread.mian(String[])是被
ZygoteInit启动的,我们来ActivityThread.mian(String[])中看看:
public static void main(String[] args) {
.....
/**
* 创建我们常说的MainThread的消息循环队列
*/
Looper.prepareMainLooper();
/**
* 初始化我们的主角ActivityThread
*/
ActivityThread thread = new ActivityThread();
/*
*这个方法是将我们的ActivityThread连接到,我们MainThread
*它里面都做啥呢,我们在下面来分析分析
*/
thread.attach(false);
if (sMainThreadHandler == <