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

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

          

        

        

时间: 2024-10-19 03:06:02

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

从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记

原文链接http://sparkyuan.me/2016/03/14/四大组件的工作过程/ 转载注明出处 系统对四大组件的过程进行了很大程度的封装,日常开发中并不需要了解底层的工作原理,那么研究这些原理的意义在哪里呢? 如果你想在技术上更进一步,那么了解一些系统的工作原理是十分必要的,也是开发人员日后成长为高级工程师所必备的技术能力. Android作为一个优秀的基于Linux操作系统,其内部一定有很多值得我们学习的地方,通过对Android操作系统的学习对提高开发人员的内功有很大的好处. 如果

四大组件的工作过程探索(一)

四大组件的运行状态: Android中的四大组件中除了BroadcastReceiver以外,其他三种组件都必须在Android Mainfrst中注册.对于,BroadcastReceiver来说,他既可以在AndroidMainfrst中注册也可以通过代码来注册.在调用方式上,Activity,Service和BroadcastReceiver需要借助Intent,而ContentProvider则无需借助Intent. Activity的工作过程: 为了方便日常的开发工作,系统对四大组件的

Android深入四大组件(四)广播的注册、发送和接收过程

相关文章 Android深入理解四大组件系列 前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分,本文不再赘述. 1.广播的注册过程 BroadcastReceiver的注册分为两种,分别是静态注册和动态注册,静态注册在应用安装时由PackageManagerService来完成注册过程,关于这一过程,我会在后续的介绍PackageManagerSe

Android深入四大组件(五)Content Provider的启动过程

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Android深入四大组件(五)Content Provider的启动过程 - 刘望舒的专栏 - 博客频道 - CSDN.NET 刘望舒的专栏 欲为大树,莫与草争 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Pyth

Android深入四大组件(三)Service的绑定过程

相关文章 Android深入理解四大组件系列 前言 我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大组件(二)Service的启动过程这篇文章,知识点重叠的部分,本篇文章将不再赘述. 1.ContextImpl到ActivityManageService的调用过程 我们可以用bindService方法来绑定Service,它的实现在ContextWra

Android深入四大组件(二)Service的启动过程

相关文章 Android深入理解四大组件系列 前言 此前我用较长的篇幅来介绍Android应用程序的启动过程(根Activity的启动过程),这一篇我们接着来分析Service的启动过程.建议阅读此篇文章前,请先阅读Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章. 1.ContextImpl到ActivityManageService的调用过程 要启动Service,我们会调用startService方法,它的实现在C

Android学习笔记—第二章 Android四大组件

第二章 Android四大组件 Activity(活动窗口): Android程序中最基本的模块,为用户操作而展示的可视化用户界面.一个Android应用程序可以只有一个Activity,也可以包含多个Activity,数量及每个Activity的作用取决于应用程序及其设计. (1)Activity的生命周期 创建→运行   onCreate   onStart   onResume 运行→销毁   onPause    onStop    onDestory 运行→停止(不可见  不可操作)

第六章:四大组件之Activity

tivityActivity作为Android四大组件之一,也是其中最重要的一个组件.作为一个与用户交互的组件,我们可以把Activity比较成为windows系统上的一个文件夹窗口,是一个与用户交互的界面.再进一步说,当我们拿起Android打开拨号功能,显示出拨号盘的界面其实就是一个Activity:当然,可以更大范围的说,手机屏幕上显示的任何界面都是一个个Activity. 运行状态:当Activity处于屏幕最前端,此时Actiivity完全显示在用户的界面中,并能获取焦点时,可以响应用

Laxcus大数据管理系统2.0(11)- 第九章 容错

第九章 容错 在当前,由于集群庞大的组织体系和复杂性,以及用户普遍要求低成本硬件,使得集群在运行过程中发生的错误概率,远远高于单一且性能稳定的小型机服务器,并且集群在运行过程中几乎是不允许停止的,这就更需要提供比单机环境复杂得多的错误管理方案.实际上,我们在产品设计.开发.运营的各个阶段,有相当大一部分精力,都是用来获取各种故障,和解决各种故障发生后的错误处理问题.对于这些错误处理,我们整体遵循这样一个思路来解决:首先由软件感知来发现和定位故障点,然后进行判断,如果属于软件可以解决的故障,那么通