Android软件流程之AppFrameworkRil.doc
文本预览下载声明
Android软件流程之AppFrameworkRil
(待续)
前 言
本人主要负责Android的Phone模块的bug修改,经过几个月的学习,熟悉了Phone模块ARM11(App、Framework与Ril)的整体框架。本文我将带领大家熟悉Android的App层与Framework层与Ril层如何进行交互,让大家了解具体代码流程,了解体系的整体框架。下面我将首先介绍App层、Framework层的详细流程,之后是Ril层。
在看本文之前希望读者能对一下知识有所了解,特别是Android的Handler机制,当然在文章中我也会对下面知识加以简单介绍。
面向对象
设计模式Handle ,Message ,Looper 机制
第一部分
Android软件流程之AppFramework
一. 简述
Ril概述
RIL(Radio Interface Layer)工作在,负责数据的可靠传输、命令的发送以及response的解析。当然,除了对网络的支持,RIL也支持SMS、Call等功能。RIL_REQUEST_GET_SIM_STATUS等),最终由Ril层把这些请求下发给ARM9侧。
Response:
Response代表ARM9侧向ARM11侧上报的一些信息,它又可以分为两种
UNSOL_RESPONSE:主动上报的一些信息,如来短信,
SOL_RESPONSE:上层下发的一些请求,是需要有应答的,也可以说是响应的,如我下发了RIL_REQUEST_GET_SIM_STATUS,需要Ril上报回来SIM_STATUS,我们把这些上报信息称为命令的响应。
这些“消息”分别在framework层和ril层,都有定义,framework层定义在ernal.telephony包中的Rilcommands.java中,ril层在ril_commands.h中定义,这两处的定义是完全一致的,每条“信息”都是一一对应的。
下面我把所有的这些“信息”,都汇总在下面,并进行的简单的描述,来让大家知道Ril到底在和App和Framework进行哪些“交互”:
下面我将根据具体“消息”的讲述其功能、流程,以这些“消息”为出发点,开始我们的“流程之旅”
二. 具体的流程
1、/*取得SIM卡的状态*/
RIL_REQUEST_GET_SIM_STATUS
RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED
Android手机中,上层(注:本文中所说的“上层”如不做特别说明,代表App层和Framework层)不会主动下发RIL_REQUEST_GET_SIM_STATUS获取SIM卡请求,而会在Ril层主动上报RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED后,才会发送RIL_REQUEST_GET_SIM_STATUS
下面让我们来看具体流程
1)Ril层主动上报RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED
在上层中最终与Ril层进行对话的最后一道门是Ril.java,这个文件的非常重要,以至于你如果能把Ril.java中的类和方法全部搞懂,你就不用看这篇文章了,你已经了解了上层的基本流程。
下面我先介绍下Ril.java这个文件,这个文件定义了两个类RILRequest类和Ril类,其中Ril类有定义了两个内部类RILReceiver和RILSender,各个类的关系与作用见下图:
在Ril构造函数中,我们会开启RILReceiver线程,
之后RILReceiver线程就开始监听Ril层是否有上报信息,具体的就是监听上层与Ril层的socket通道
Ril层上报的信息是以Parcel类型传上来的,通过监听Socket通道,一旦有信息上报,就进入了信息的处理函数processResponse (Parcel p):
在processResponse (Parcel p)中通过读取P的“第一位”信息,判断上报信息的类型,对主动上报和命令的响应两种信息分别处理,由于RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED是主动上报的所以进入processUnsolicited (Parcel p):
protected void processUnsolicited (Parcel p){
……
Response=p.readInt()
//读取P中的“第二位”信息,注意与第一次p.readInt()的值并不一样
……
……
……
……
上面的process函数通过读取Ril上报的p的“第二位”信息判断出来是上报的具体信息是R
显示全部