研究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. activitie用户手册

    最近公司开发流程,学习流程开发,不停看api学习.这是做软件的额...不停的学习学习!!!天天进步中! 用户手册地址:http://www.mossle.com/docs/activiti/#acti ...

  2. <<开源硬件创客 15个酷应用玩转树莓派>>

    本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派的前世今生,掌握树莓派基本的使用方法.第4~18章主要介绍15个以树莓派为载体的酷炫应用,大家可以按 ...

  3. HDOJ 2114 Calculate S(n)(找周期)

    Problem Description Calculate S(n). S(n)=1^3+2^3 +3^3 +--+n^3 . Input Each line will contain one int ...

  4. Nodejs in Visual Studio Code 05.Swig+Bootstrap

    1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...

  5. UVAlive3523 Knights of the Round Table(bcc)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18122 [思路] 点-双连通分量 求出bcc,判断每个bcc是否为 ...

  6. L - Kakuro Extension - HDU 3338 - (最大流)

    题意:有一个填数字的游戏,需要你为白色的块内填一些值,不过不能随意填的,是有一些规则的(废话),在空白的上方和作方给出一些值,如果左下角有值说明下面列的和等于这个值,右上角的值等于这行后面的数的和,如 ...

  7. nexus私服安装

    一.搭建nexus私服.当前服务器版本是jdk1.8    . nexus安装包下载:http://www.sonatype.org/nexus/archived 先是下载目前最新的版本 Nexus ...

  8. 微信公众账号【iOSDevTip】推出新栏目【看大牛】

    首先你须要关注微信公众账号[iOSDevTip] 基于微信公众平台数据分析.非常easy发现.移动端project师都喜欢关注互联网创业资讯.都说.一个不关注互联网创业的iOS开发不是一个合格的互联网 ...

  9. Adding Swap Files

    Adding Swap Files If you do not have free disk space to create a swap partition and you do need to a ...

  10. 对相同id的input框的循环判断

    $("input[id=sl]").each(function(){ alert(10); });