1.BootLoader(芯片内嵌)
2.Linux
【system/core/】
init/init.cpp
main -> LoadBootScripts(am,sm) -> rootdir/init.rc(Android Init Language);
init.rc -> trigger zygotę-start
3.Zygote(JVM jni)
4.SystemServer开启两个进程:
开启Binder线程池
SystemServiceManager
5.由进程:Zygote、SystemServer、SystemServiceManager共同作用开启AMS、PMS、WMS、CS、SS等80多个服务;
6.由AMS开启Launcher(App)(【packages/】apps/launcher/项目代码…/Launcher.java)
Launcher.java extends Activity
onClick(View);
startActivitySafely
冷启:startActivity
startActivityForResult
通过Instrument使用execStartActivity找到AMS
通过AMS申请内存,获取资源,进行启动;
热启动
热启:launcherApps.startMainActivity
mService.startActivityAsUser(mService:ILauncherApps)
通过Binder通信找到AMS
通过AMS提供Binder接口访问已经冷启过的代码
7.Zygote进程fork()一个进程:ActivityThread.java;
8.ActivityThread.java -> main()【需要启动的App进程的启动节点】;
thread.attach
IActivityManager mgr = ActivityManager.getService();
mgr.attachApplication(…);//绑定Application
通过AMS回调handleBindApplicaion(AppBindData data);
app = data.info.makeApplication(…);//生产过程;
mInstrumentation.onCreate(data.instrumentationArgs);
minstrumentasion.callApplicationOnCreate(app);
app.onCreate();
performLaunchActivity
mInstrumentation.newActivity(…);//生产Activity
mInstrumentatino.callActivityOnCreate(…);
activity.onCreate(…);//MainActivity
【注意】
1.Activity有两个onCreate,一个系统用的,一个可以给我们做自定义的;
2.一个App进程只会有开启一个ActivityThread;
【对象解释】
1.Instrumentation:自动化监控,负责在AMS和Activity、Fragment、Application之间通信,进行生 命周期的串联,整个系统的Activity、Fragment、Application所有的生产过程、生命周期等的调 用信息都可以通过拦截反射该Instrument对象来获取;
【其他】
==================================================================== ContentProvider比其他组件都更早初始化,可以在这里拿到一些配置信息,例如屏幕的宽高信息,也可以在这里初始化部分框架,例如Leakcanary、bugly都是在这里进行初始化的;
====================================================================
====================================================================
====================================================================
Rxjava
观察者模式
变种链式调度装饰器模式
适配器模式
模版模式