1.打开电源 引导芯片代码加载引导程序Boot Loader到RAM中去执行
2.BootLoader把操作系统拉起来
3.Linux 内核启动开始系统设置,找到一个init.rc文件启动初始化进程
4.init进程初始化和启动属性服务,之后开启Zygote进程
5.Zygote开始创建JVM并注册JNI方法,开启SystemServer
6.启动Binder线程池和SystemServiceManager,并启动各种服务
7.AMS启动Launcher
1、我们可以通过adb命令查看APP的启动情况:
(1)通过adb shell dumpsys activity activities查看当前的activity名
(2)查看进程 adb shell ps
2、application的启动
(1)application的启动源于一个名为Launcher.java的类,该类的位于:
E:\tools\android-src\android-6.0.1_r1\packages\apps\Launcher2\src\com\android\launcher2\Launcher.java(2)当我们用手点击一个图标时,就到了这个类public final class Launcher extends Activity执行onClick(View view)方法,会把这个应用的相关信息传入先获取一个intent:
---》startActivitySafely(v, intent, tag) ---》startActivity(v, intent, tag) ---》startActivity(intent);(3)startActivity(intent)会开一个APP进程,启动流程如下图:
(4)ActivityThread.java做为入口,用attach开启app,再加载application和activity:
---》thread.attach(false) ---》mgr.attachApplication(mAppThread) 会通过远端进程去回调private void handleBindApplication(AppBindData data) ---》Application app = data.info.makeApplication(创建Application对象) ---》mInstrumentation.callApplicationOnCreate(app) ---》 app.onCreate();