Android系统初始化到Activity启动

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

        观察者模式

        变种链式调度装饰器模式

        适配器模式

        模版模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值