Android Framework------之ActivityManagerService与Activity之间的通信
研究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之间的通信的更多相关文章
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android中BroadCast与Activity之间的通信
在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...
- Android中两个Activity之间简单通信
在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Fragment的生命周期和Activity之间的通信以及使用
Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragme ...
- Fragmen和Activity之间的通信--接口和实现的分离(转)
Fragmen和Activity之间的通信--接口和实现的分离(转) 分类: Android平台 在平板的开发过程中通常都会采用多个Fragment的实现方式,通常有一个为list的Fragm ...
- Activity之间的通信
通常Activity之间的通信有三种方式:单向不传参数通信.单项传参数通信和双向通信. 这几种传递方式都需要通信使者Intent.以下将用代码来辅助理解. 1.单向不传递参数通信 public cla ...
- Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- 适配器(adapter)与fragment之间、fragment与activity之间的通信问题
一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...
随机推荐
- 【HDOJ】1510 White Rectangles
这个题目很好,变形的题目也很多.简单DP. /* 1510 */ #include <cstdio> #include <cstring> #include <cstdl ...
- BZOJ2749: [HAOI2012]外星人
2749: [HAOI2012]外星人 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 377 Solved: 199[Submit][Status] ...
- C#编译时出现“不安全代码只会在使用 /unsafe 编译的情况下出现”错误的解决
原因是:在编译的代码里面有不安全类型unsafe方法或类!解决方法:将项目属性页中生成下的“允许不安全代码”复选框打上对勾即可,方法如下:项目属性对话框->生成->允许不安全代码块 选中即 ...
- 调用test case集,并生成测试报告
结构是 test_all.py 进行配置,执行所有测试用例集,并合并测试报告到同一个文件 #test_all.py 进行配置,执行所有测试用例集 # coding = utf-8 from time ...
- mongodb3.0 性能測试报告 一
mongodb3.0 性能測试报告 一 mongodb3.0 性能測试报告 二 mongodb3.0 性能測试报告 三 測试环境: 服务器:X86 pcserver 共6台 cpu: 单颗8核 ...
- App发布AppStore【苹果开发者中心需要做的事】
请准许我的这句抱怨,也说明发布app到AppStore理清这些东西的重要性:起初打包出现各种 ApplicationVerificationFailed,不是这里没有搞对就是那个证书没有搞对,整个人签 ...
- Apache配置HTTPS协议搭载SSl配置全过程
1.首先要开启相应的扩展和辅助的dll(ssleay32.dll,libeay32.dll)到system32下 2.生成服务器证书 安装好在bin目录下有一个openssl.exe文件,用来生成证书 ...
- 编译lua版本问题
Compile++ thumb : game_shared <= main.cppjni/hellocpp/main.cpp: In function 'void Java_org_cocos ...
- 彻底卸载MYSQL,windows版
转自:http://blog.csdn.net/jasonandwho/article/details/7451310 网上搜的总结帖,直接贴过来的... 由于安装MySQL的时候,疏忽没有选择底层编 ...
- NuGet学习笔记(1)——初识NuGet及快速安装使用(转)
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...