研究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. 关于pthread里面一些函数的使用心得!

    第一次使用pthread,遇到的问题还真不少,现在我一一记录一下: 1.关于编译时出现 对‘pthread_create’未定义的引用 之类的错误的解决:由于pthread库不是Linux系统默认的库 ...

  2. db file sequential read等待事件的一点研究

    db file sequential read等待事件有3个参数:file#,first block#,和block数量. 这个等待事件有3个参数P1,P2,P3, 其中P1代表Oracle要读取的文 ...

  3. 将多个图片整合到一张图片中再用CSS 进行网页背景定位

    原文地址:http://wenku.baidu.com/link?url=hj_qM9kmdMrg8KWXFD2bCF_uuJCxKJRvG97CkWk3itsPq3izMzfrKvSZYBzDGyP ...

  4. UVAlive3523 Knights of the Round Table(bcc)

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

  5. Ubuntu runlevel修改

    安装Unbuntu 12.04. 据说Ubunut的一个UI相对友好的Linux版本,但我的需求是仅仅将其作为服务器使用,偶尔用用UI界面.所以我希望启动Ubuntu时,直接进入Shell命令行. 印 ...

  6. 百度——LBS.云 v2.0——创建自己的地理云数据

    随着云技术和地理信息(GIS)技术的发展,今年终于进入了.地理分享的新纪元.百度提供了LBS的云存储.真是个不错的功能.下面让我们来看看如何使用吧. 1.注册百度开发者账号(此处略去88个字) 2.创 ...

  7. .NET注册页面代码

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  8. Java基础知识强化29:String类之String类构造方法

    1. 常用String构造方法使用: package cn.itcast_01; /* * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. * 通过查看API,我们可以知道 * A: ...

  9. 向量的叉积 POJ 2318 TOYS & POJ 2398 Toy Storage

    POJ 2318: 题目大意:给定一个盒子的左上角和右下角坐标,然后给n条线,可以将盒子分成n+1个部分,再给m个点,问每个区域内有多少各点 这个题用到关键的一步就是向量的叉积,假设一个点m在 由ab ...

  10. 读取文件内容返回List<String>类型

    文件内容格式: string1 string2 String 3 …… 很简单,两句话 String content = new String(Files.readAllBytes(Paths.get ...