第九章:四大组件的工作过程

    9.1 四大组件的运行状态

      Android的四大组件中除了BroadcastReceiver意外,其他三种组件都必须在AndroidManifest中注册.

      在调用方式上,Activity,Service和BroadcastReceiver需要借助Intent,而ContentProvider则无须借助Intent.

      Activity是一种展示型组件,用于向用户直接地展示一个界面,并且可以接收用户的输入信息从而进行交互.

      Service是一种计算型组件,用于在后台执行一系列计算任务,需要灵活采用stopService和unBindService这两个方法才能完全停止一个Service组件.

      BroadcastReceiver是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息.

    9.2 Activity的工作过程

      startActivity方法有好几种重载方式,但它们最终都会调用startActivityForResult方法.

      ApplicationThread是ActivityThread的一个内部类,在Activity的启动过程中发挥着很重要的作用.

      在ActivityManagerNative中,AMS这个Binder对象采用单例模式对外提供,Singleton是一个单例的封装类,第一次调用它的get方法时它会通过create方法来初始化AMS这个Binder对象.

      checkStartActivityResult的作用就是检查启动Activity的结果,当无法正确地启动一个Activity时,这个方法会抛出错误信息.

      Activity的启动过程在ActivityStackSupervisor和ActivityStack之间的传递顺序

      

 

      performLaunchActivity这个方法主要完成了如下几件事

        1.从ActivityClientRecord中获取待启动的Activity的组件信息.

        2.通过Instrumentation的newActivity方法使用类加载器创建Activity对象.

        3.通过LoadedApk的makeApplication方法来尝试创建Application对象.

        4.创建ContextImpl对象并通过Activity的attach方法来完成一些重要数据的初始化.

        5.调用Activity的onCreate方法

 

    9.3 Service的工作过程

        Service分为两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用户其它组件和Service的交互.

        通过Context的startService方法即可启动一个Service.

      9.3.1 Service的启动过程

        从ContextWrapper的startActivity开始

        AMS会通过mServices这个对象来完成Service后续的启动过程,mServices对象的类型是ActiveServices,用来辅助AMS进行Service管理的类,包括Service的启动,绑定和停止.

        handleCreateService:

          首先通过类加载器创建Service的实例.

          然后创建Application对象并调用其onCreate.

          接着创建ConTextImpl对象并通过Service的attach方法建立二者之间的关系

          最后调用Service的onCreate方法并将Service对象存储到ActivityThread中的一个列表中.

      9.3.2 Service的绑定过程

        主要通过AMS来完成Service的具体绑定过程,bindService方法

        AMS会调用ActiveServices的bindServiceLocked方法...最终通过ApplicationThread来完成Service实例的创建并执行其onCreate方法.

    9.4 BroadcastReceiver的工作工程

      一个是广播的注册过程,另一个是广播的发送和接收过程.

      在AndroidManifest文件中静态注册

      <receiver android:name=".MyReceiver">

        <intent-filter>

          <action android:name="com.example.receiver.LAUNCH">

        </intent-filter>

      </receiver>

      9.4.1 广播的注册过程

        静态注册和动态注册

        是由PMS(PackageManagerService)来完成整个注册过程.

        动态注册的过程是从ContextWrapper的registerReceiver方法开始的.

        最终会把远程的InnerReceiver对象以及IntentFilter对象存储起来.

      9.4.2 广播的发送和接收过程

        当通过send方法来发送广播是,AMS会查找匹配的广播接受者并将广播发送给他们处理.

        普通广播,有序广播和粘性广播.

        广播发送仍然开始于ContextWrapper的sendBroadcast方法.将事情交给ContextImpl去处理.

        在broadcastIntentLocked的内部,会根据intent-filter查找出匹配的广播接收者并经过一些列的条件过滤,最终会将满足条件的广播接收者添加到BroadcastQueue,接着BroadcastQueue就会将广播发送给相应的广播接收者.

    9.5 ContentProvider的工作过程

        一种内容共享性组件,它通过Binder向其他组件乃至其它应用提供数据,当ContentProvider所在的进程启动时,ContentProvider会同时启动并被发布到AMS中.

        ContentProvider启动过程:

          

         

        

转载于:https://www.cnblogs.com/JingQ/p/6185305.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值