美文网首页
第九章 四大组件的工作过程—学习笔记

第九章 四大组件的工作过程—学习笔记

作者: Cloud_9527 | 来源:发表于2017-05-20 16:26 被阅读0次

    四大组件运行状态

    四大组件除了BroadcastReceiver,其他三个组件都必要在AndroidManifest中注册。对于BR来说可以在配置文件中注册,也可以在代码中注册。调用方式上,Activity、Service、BR需要借助Intent,而ContentProvider则不需借助Intent。

    Activity是展示型组件,向用户提供一个界面。可以接受用户的输入信息从而进行交互。
    Service是一种计算型组件,用户在后台执行一系列的计算任务。用户无法感知到它的存在。它默认是在主线程中运行,如果是耗时的任务仍需要在单独的线程中去执行。
    BroadcastReceiver是一种消息型组件。用于在不同的组件乃至不同的应用之间传递消息。有两种注册方式,静态注册和动态注册,静态注册是在配置文件中注册,动态注册是在代码中注册。静态注册会在安装时就会被系统解析,因此不需要启动程序就可以收到相应的广播,而动态注册必须启动应用后才能收到广播。BR组件可以实现低耦合的观察者模式。BR它也不适合执行耗时的操作。
    ContentProvider是一种数据共享型组件,用于想其他组件或者其他应用共享数据。

    Activity工作过程(关键节点)

    Activity的startActivity有好几种重载方法,但是最终都是调用startActivityForReuslt方法。在经过Instrumentation中的execStartActivity方法,发现Activity真正的实现是由ActivityManagerNative.getDefault()的startActivity完成。ActivityManagerService(AMS)继承自ActivityManagerNative(AMN),因此Activity的启动过程又转移到了AMS的startActivity中。在这个方法中,Activity的启动过程是这样:先转移到ActivityStackSupervisor中在相继执行下面的方法,见流程图

    ActivityStackSupervisor.png

    在ActivityStackSupervisor的realStartActivityLocked方法中有一段代码app.thread,这个类型是IApplicationThread,IApplicationThread继承自IInterface接口,它是一个Binder类型的接口。IApplicationThread的实现者是ActivityThread中的内部类ApplicationThread。在ApplicationThread中通过scheduleLaunchActivity来启动Activity。该方法发送一个H(Handler) ,在这个H中有对"LAUNCH_ACTIVITY"消息处理得知,Activity启动是ActivityThread的handleLanuchActivity来实现,再由performLaunchActivity完成了Activity对象的创建和启动过程。performLaunchActivity这个方法主要完成了如下几件事:
    1.从ActivityClientRecord中获取待启动的Activity的组件信息
    2.通过Instrumentation的newActivity方法使用类加载器 创建Activity对象
    3.通过LoadedApk的makeApplication方法来尝试创建Application
    4.创建ContextImpl对象通过Activity的attach方法来完成一些重要数据的初始化。
    5.调用Activity的oCreate方法

    Service的工作过程

    Service的工作过程.png

    相关文章

      网友评论

          本文标题:第九章 四大组件的工作过程—学习笔记

          本文链接:https://www.haomeiwen.com/subject/mtspxxtx.html