zoukankan      html  css  js  c++  java
  • 第九章:四大组件的工作过程

        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启动过程:

              

             

            

  • 相关阅读:
    值得学习的东西
    【单调队列】转载
    dom基础3 — 简易版template.js
    js基础6 — 数组对象
    js基础6 — 字符串基本操作
    js基础5 — 将十六进制颜色转为rgba()
    js基础4 — 数组操作
    placeholer属性修改
    clipboard.js实现复制到剪切板
    JS 获取指定日期在当年的第几周
  • 原文地址:https://www.cnblogs.com/JingQ/p/6185305.html
Copyright © 2011-2022 走看看