Android系统&Activity(app)的启动流程

一、Android系统的启动流程

init进程解析init.rc,先启动ServiceManager进程,然后启动Zygote进程,Zygote启动SystemServer进程,SystemServer中开启Android系统各项关键服务(AMS,WMS)。
https://blog.csdn.net/yangwen123/article/details/9029959
https://blog.csdn.net/itachi85/article/details/56669808

二、Actiivity的启动流程

APP与AMS通信.png

1、无论是通过点击桌面图标还是调用startActivity()方法启动Activity最终调用Activity的startActivityForResult(),然后调用Instrumentation的execStartActivity(),最终调用ActivityManagerProxy的startActivity()
2、ActivityManagerProxy是AMS在App进程的代理,调用AMS的startActivity(),在该过程会使前台处于Resume状态的Activity变成Pause状态,判断系统中是否存在该进程,不存在通过socket 通知Zygote fork一个新的进程,然后调用Activity的main方法,这个过程中AMS会与ApplicationThreadProxy绑定,然后IPC回调ApplicationThread的bindApplication,发送消息给handler,反射拿到Application对象之后,依次调用attach(),onCreate。
3、如果Appliction已经存在则跳过创建Application的过程,调用ActivityThread中的handleLaunchActivity()反射实例话Activity实例,依次调用attach、onCreate、onStart 、onSaveInstance,onResume等方法。
https://www.jianshu.com/p/6037f6fda285
https://www.jianshu.com/p/9ecea420eb52
https://blog.csdn.net/tellh/article/details/57418651
https://blog.csdn.net/Gaugamela/article/details/53067769

你可能感兴趣的:(Android系统&Activity(app)的启动流程)