首先抛开Android的一切概念来研究一下电话系统的最基本的描述。咱们的手机首先用来打电话的,随后是须要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想咱们的手机无所不能,替代PC。可是做为一个电话的基本功能以下: android
0)拨叫电话,接听电话,挂断电话,发送短信,网络链接,PIM管理 网络
1)因为电话运营商为咱们提供了呼叫等待,电话会议等补充业务,因此咱们的手机须要管理多路通话,如何管理? 架构
2)来电时,咱们要播出来电铃声,接通时咱们须要切换语音通道,这个又跟多媒体系统打上了交道,例若有耳机插上了,有蓝牙耳机连上了,系统该作如何的管理和切换? 框架
3)上网的网络通路创建(例如GSM GPRS),如何PPP链接并链接到LinuxSocket通道上的?系统如何管理数据链接? 函数
4)AP跟Modem通信时经过AT指令的,如何将AT指令变成一个个具体的操做函数,如何管理Modem发给咱们的回应,AT命令通道,数据通道如何管理? 云计算
5)sim卡的电话本如何管理? spa
上面的关于手机的基本问题,Android电话系统设计者必需要解答的问题。该设计如何的管理框架,提出什么概念来表达?因此要分析Android的电话部分,仍是须要理解电话实现的背景知识,通信协议,大致框架。 设计
咱们回到电话系统基本构成上,先从总体上去把握一下电话模块的大致框架,先从空中俯瞰。我给出的图是通常的智能手机的框架图,该框架基本可以归纳全部手机电话模块的构成,固然也包括Android的电话系统构成。 对象
智能机架构通常是应用处理器+Modem。应用处理器与Modem的链接使用串口或者USB。在一个硬件串口通路上实现为了要同时实现数据传输并同时实现控制Modem,就须要实现多路复用协议(GSM TS07.10),在底层咱们在多路复用的基础上虚拟了两个串口,一个用于CMD通道,一个用于DATA通道。电话的全部控制通路都是在这连个通道上。 it
RIL,Radio Interface Layer。本层为一个协议转换层,手机框架须要适应多类型的Modem接入到系统中,而对于不一样的Modem有不一样的特性,AT指令的格式或者回应有所不一样,可是这种特性在设计应用时不可能彻底考虑和兼容。因此设计者在设计电话系统时,创建了一个虚拟电话系统,为该虚拟电话系统规定了标准的功能,上层的电话管理都是创建在这些标准的功能基础之上。而RIL则是将虚拟电话系统的标准功能转换成实际的所使用的Modem的AT指令。
Android设计者将电话系统设计成了三部分。
Andoird的Phone Service实际上是PhoneApp。GSMPhone(CDMAPhone)是Phone Service核心的对象,他包含了以下的相关对象。
咱们的分析任务就是要把这些对象的相互关系,及其对象间数据传递关系弄清楚。首先咱们给出如下的Android电话系统的框架,以便对Android电话系统有个概要的认识,而后从数据流的角度,以及对象的引用关系来分析系统。下面是android电话系统总体框架图。