文档详情

Android软件流程之AppFrameworkRil.doc

发布:2017-12-16约1.19万字共18页下载文档
文本预览下载声明
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
显示全部
相似文档