Activity是Android应用程序的四大组件之一,负责管理Android应用程序的用户界面。一个应用程序一般会包含若干个Activity组件,每个Activity组件负责一个用户界面的展现,它们可能运行在同一个进程中,也可能允许在不同的进程中。运行至不同进程中的Activity组件通过Binder进程间通信机制来协作完成应用程序的功能。

Activity组件的启动方式分为显示和隐示两种。对于显示启动的Activity组件来说,我们必须事先知道用来实现它们的类的名称;对于隐示启动的Activity组件来说,我们只需要知道它们的组件名称即可。隐示启动Activity组件可以减少Android应用程序组件间的依赖。


根Activity组件的启动过程:

由于根Activity组件代表了一个Android应用程序,因此,它一般是在一个新的进程中启动起来的。


在Android系统中,所有的Activity组件都保存在一个堆栈中,其中,后面启动的Activity组件位于前面启动的Activity组件的上面。用户在执行一个操作时,通常需要与一系列相关的Activity组件进行交互,这些相关的Activity组件在系统的Activity堆栈中用一个任务(Task)来描述。


系统的Activity组件堆栈有TasksRecord#2和TasksRecord#3 两个任务,其中,TasksRecord#2包含了一个Lancher组件,表示我们打开了应用程序Launcher.而任务TasksRecord#3包含了一个MainActivity组件,表示我们打开了应用程序Activity。


MainActivity组件是有Launcher组件来启动的,而Launcher组件又是通过Activity管理服务ActivityManagerService来启动MainActivity组件的。由于MainActivity组件,Launcher组件和ActivityManagerService是分别运行在不同的进程中的。因此MainActivity组件的启动过程就涉及到了三个进程。这三个进程是通过Binder进程间通信机制来完成MainActivty组件的启动过程。


Launcher组件启动MainActivity组件的过程如下:

1.Launcher组件向ActivityManagerService发送一个启动MainActivty组件的进程间通信请求。

2.ActivityManagerService首先将要启动的MainActivity组件的信息保存下来,然后再向Launcher组件发送一个进入终止状态的进程间通信请求。

3.Launcher组件进入到中止状态后,向ActivityManagerService发送一个已进入中止状态的进程间通信请求。

4.ActivityManagerService发现用来运行MainActivity组件的应用程序不存在,就会启动一个新的应用程序进程。

5.新的应用程序进程启动完成后,就会向ActivityManagerService发生一个启动完成的进程间通信请求。

6.ActivityManagerService将第二步保存下来的MainActivity组件的信息发送给第4步创建的应用程序进程,以便它可以将MainActivity组件启动起来。




更多相关文章

  1. 开发前奏曲之添加Android(安卓)SDK平台工具
  2. 控制Android应用权限的五种方法
  3. 转:解开Android应用程序组件Activity的”singleTask”之谜
  4. Android中的跨进程通信方法实例及特点分析(二):ContentProvider
  5. Android(安卓)安全访问机制
  6. Android(安卓)Activity组件正常以及锁屏状态下的启动流程
  7. Android(安卓)程序的主要组成部分 和 Manifest 文件
  8. Android的相关布局管理器
  9. 深入探讨Android----必不可少的高级功能

随机推荐

  1. C#入门经典学习阶段小结(凌乱)
  2. C#使用Newtonsoft的Json.NET进行对象的序
  3. 第五章C++:语句的相关介绍
  4. C#_调用封装的一个类实现导出Excel表格的
  5. C# 使用NPOI生成Word文档(按照模板)
  6. 第四章C++:表达式概念-运算符的应用
  7. 如何看待C#中的out和ref?探讨它们之间的区
  8. 第三章C++:字符串string、向量vector和数
  9. 基于汇编的 C/C++ 协程(用于服务器)的实现
  10. 第二章C++:变量和基本类型