Android软件启动流程

看了很多博客,越看越懵逼,还是慢慢点开瞅瞅。为啥人家都那么厉害

1.用户点击APP图标
2.触摸屏经过一系列我不懂的操作--->framework :XX地方手指按下
3.用户松开手指
4.触摸屏经过一系列我不懂的操作--->framework :XX地方手指抬起
5.framework--->:计算
6.framework--->启动器Launcher :XX地方产生了点击的Action
7.启动器Launcher --->:找到APP图标对应的Intent
8.启动器Launcher --->ActivityManagerService :打开xx Intent
9.ActivityManagerService--->:进行一系列操作
10.ActivityManagerService--->Zygote:创建进程,并调用ActivityThread的main方法
11.启动APP

7步骤详细:
Launcher发送Intent并设置启动方式为FLAG_ACTIVITY_NEW_TASK,最终调用startActivityForResult方法。这个方法中通过 mInstrumentation.execStartActivity(Context who, IBinder contextThread, IBinder token, Activity target,Intent intent, int requestCode, Bundle options)方法(Instrumentation主要用来监控应用程序和系统的交互)第二个参数是ActivityThread类型变量,为UI线程,是APP在启动的时候创建的,ActivityThread中有一个main函数,是APP启动时的入口。token代表Launcher这个Activity也通过Instrumentation传给AMS,就知道谁向AMS发起了请求。

8步骤详细:
在Instrumentation.ActivityResult方法中通过ActivityManager的getService方法来获取AMS的代理对象(Android 7.0是通过ActivityManagerNative的getDefault来获取AMS的代理对象),返回类型是IActivityManager(一个接口,继承自IInterface,定义了四大组件的生命周期)

你可能感兴趣的:(Android软件启动流程)