研究Android系统的童鞋,想必都已经了解一个Activity的启动过程了。而且在网上,关于Activity的启动的文章非常多,很容易就能找到的。这篇文章的重点放在ActivityManagerService如何与新进程之间的通信商,因此关于Activity的启动过程,这里就略过不说了。 本文是基于《深入理解Android II》中第六章的前两节完成,对于书中的内容,这里尽量少说,而是以自己的理解和补充为主。

下面列出一幅图,是描述Activity启动过程在ActivityManagerService所在进程及应用程序所在进程的执行的函数有哪些

未完,待续

在文章的最后,提出几个问题:

(1)在Android提供的文档中如下描述Activity的:

An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View). While activities are often presented to the user as full-screen windows, they can also be used in other ways: as floating windows (via a theme with windowIsFloating set) or embedded inside of another activity (using ActivityGroup).

由文档中的描述可以看出,activity的两大功能: 持有Window可以放置UI;和用户交互。了解过Android系统之后,我们会知道,UI是放在PhoneWindow中的;交互是由View完成的。由此看来,Activity只是对这两个对象进行了组合。在Android系统中能做这样的事情对象也有很多啊,为什么一定要用Activity呢?即Android系统设计者使用Activity的目的是什么?

我自己的理解,不一定和Activity存在的目的一致的:  为了把功能模块化。每个Activity的目的是单独的功能,使用Intent.Actiion_xxx声明。而这个功能就是通过View的各种各样的交互来实现。做个比喻,View能够完成的交互功能就像是程序语言中的基本数据类型,而Activity就像是个类,由各种各样的基本数据类型放在一起才能组成一个特定的类。activity从功能的角度来说,就是由各种各样的View功能放在一起才能组成一个特定的功能,就是activity。我想,如果从这个目的出发去了解Activity的实现原理,去阅读源代码会轻松些。

(2)Android系统设计者为了实现这个目的,又设计了哪些数据结构和哪些算法?

首先要有Activity,ActivityManagerService。 而Activity分布在不同的进程中,很可能不会和ActivityManagerService在同一个进程中,因此要管理系统中所有的Activity,就需管理者拥有每个activity的信息,所以就有了ActivityRecord。而管理者为了更方便地管理ActivityRecord,又设计了ActivitStack。管理Activity就要涉及到不同Activity的切换,这样为了标示Activity的运行状态又设计了ActivityState。这样,ActivityStack可以按照Activity所处的状态不同分组,进一步方便了查找和管理。(ActivityState的变化不仅仅要管理者知道,更重要的是要Activity本身知道它现在所处的状态,是否可以运行,这需要进程间通信,为此有了ApplicationThread。)为了解决Activity与进程之间的关系,又设计了ProcessRecord。.....(未完,待续)

(3)Android系统设计者实现了Activity及其相关的子系统,能否进行改进和优化?

(未完,待续)

Android Framework------之ActivityManagerService与Activity之间的通信的更多相关文章

  1. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. Android中BroadCast与Activity之间的通信

    在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...

  3. Android中两个Activity之间简单通信

    在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...

  4. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  5. Fragment的生命周期和Activity之间的通信以及使用

    Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragme ...

  6. Fragmen和Activity之间的通信--接口和实现的分离(转)

    Fragmen和Activity之间的通信--接口和实现的分离(转) 分类: Android平台     在平板的开发过程中通常都会采用多个Fragment的实现方式,通常有一个为list的Fragm ...

  7. Activity之间的通信

    通常Activity之间的通信有三种方式:单向不传参数通信.单项传参数通信和双向通信. 这几种传递方式都需要通信使者Intent.以下将用代码来辅助理解. 1.单向不传递参数通信 public cla ...

  8. Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  9. 适配器(adapter)与fragment之间、fragment与activity之间的通信问题

    一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...

随机推荐

  1. UVa 10837 A Research Problem 欧拉函数

    题意: 给你一个欧拉函数值 phi(n),问最小的n是多少. phi(n) <= 100000000 , n <= 200000000 解题思路: 对于欧拉函数值可以写成 这里的k有可能是 ...

  2. 2015第30周三Spring常用工具类

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  3. SQL Standard Based Hive Authorization(基于SQL标准的Hive授权)

    说明:该文档翻译/整理于Hive官方文档https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authori ...

  4. HDU_1846——最简单的巴什博弈

    Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中 ...

  5. Jenkins 初见

    在网上貌似没有找到Jenkins的中文的太多的文档,有的都是关于Hudson的一些 零零散散的,所以自己边学习边实践总结了以下系列文章,希望有助于大家对于Jenkins的使用. 本系列文章是基于我3年 ...

  6. Jenkins用户组管理

    Jenkins用户组管理 转载2015-06-10 21:44:24 标签:jenkinsrolestrategypluginusergroupcitools 一.安装插件 安装RoleStrateg ...

  7. Web —— java web 项目 Tomcat 的配置 与 第一个web 项目创建

    目录: 0.前言 1.Tomcat的配置 2.第一个Web 项目 0.前言 刚刚开始接触web开发,了解的也不多,在这里记录一下我的第一个web项目启动的过程.网上教程很多,使用的java IDE 好 ...

  8. Android(java)学习笔记257:JNI之helloword案例(利用NDK工具)

    1.逻辑思路过程图: 2.下面通过一个HelloWorld案例来说明一下JNI利用NDK开发过程(步骤) 分析:我们在Win7系统下编译的C语言代码,我们知道C语言依赖操作系统,不能跨平台,所以我们要 ...

  9. JAVA - hashcode与equals作用、关系

      Hashcode的作用 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set.前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复.      ...

  10. 比较好的总结runtime

    http://www.cocoachina.com/ios/20160128/15154.html