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 ...
随机推荐
- Delphi 线程resume 不能调用Execute
如果Resume不能唤起线程,请试试如下的函数,试试. GetExitCodeThread(ThreadHandle,ExitCode)来取得ExitCode,如果ExitCode=STILL_ACT ...
- JAVA调用.NET WebService终极方案(包含对SoapHeader的处理)
一.前言: 今日部门的产品需要用到短信功能,需要走公司统一的接口,而该短信接口是由.net开发的,利用两天时间彻底搞定了用java来调用.net 的web service,包括对soap h ...
- baiduMap 显示所有的marker(在视野里显示所有的)
搞Android的,所以比较幸苦和累现在搞的app是关于百度地图的,因为要求要把所有覆盖物显示在一个视野...所以在网上找了很久,终于找打了方法 我引用的包是: 记录一下,其实不算很难.一个小点.翻了 ...
- 详解C语言的main函数
如图所示:#include<stdio.h>这是一个头文件,包含的是C程序运行的C语言的库函数,只有包含了相关的头文件,在程序中才能调用.stdio表示输入输出控制.printf():就是 ...
- mongodb清洗数据
1,数据库连接超时:DBPool的连接时的配置: 自己进行设置: MongoClientOptions mco = new MongoClientOptions.Builder() ...
- LeetCode-Add Two Binary
Add BinaryApr 2 '12 3558 / 10570 Given two binary strings, return their sum (also a binary string). ...
- iOS面试贴士
iOS面试小贴士 ———————————————回答好下面的足够了------------------------------------- 多线程.特别是NSOperation 和 GCD 的内部原 ...
- finally与return
finally关键字:和try块使用,一般做资源释放操作,比如关闭流.关闭数据库连接,释放锁. return:用于返回值. finally块可保证一定执行,当逻辑处理有返回值时,会首先执行finall ...
- [Java] Tcp/udp 简单通信
本文转自 我自己的博客guozeyiblog.cn 欢迎来訪 效果图: //UDP通信 import java.awt.*; import java.awt.event.ActionEvent; i ...
- Android 单指触控拖拽,两指触控缩放
import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view. ...