- 5
- 0
- 约1.37万字
- 约 13页
- 2017-02-09 发布于重庆
- 举报
Framework中的Ril源码分析(原)
目录(?)[-]一概述二RILRequest三发送子线程如何把数据发送到mSenderThread mSenderThread子线程把请求发送给RILC四接收子线程接收数据的过程数据的处理流程URC消息处理流程非URC消息处理流程?为了区别RIL层中的RIL.cpp,我们约定framework中的RIL.java文件描述为RILJ,而hardware中的RIL.cpp描述为RILC。一、概述? ? ? ? 所有上层对RIL层的请求,最终都需要在RILJ中转换为RIL层可识别的命令,然后通过Socket通道传输下去;同时,RIL层数据的上报,也要通过RILJ进行解码,还原为上层容易识别的格式。因此,RILJ是framework与RIL层交互的通道。? ? ? ? RILJ有两个主要特点:? ? ? ? 1、开启了两个独立线程分别负责发送数据和接收数据? ? ? ? 2、数据的发送和接收是异步的? ? ? ? 第一个特点很容易理解,而对于第二个特点有衍生出来了另一个问题:既然是异步的消息机制,也就是说发送者在发送完数据后就可以返回,那么当得到回应后,就要有一种方法去找到当初的请求者,并把结果返回给他。那么这个方法是什么呢?? ? ? ? 这个方法就是令牌系统,我们将在第二节介绍。? ? ? ? 有了以上简要的认识,我们从RILJ的入口开始展开我们的分析,也就是RILJ的构造函数:[java]?view plaincopy@RIL.java??public?RIL(Context?context,?int?preferredNetworkType,?int?cdmaSubscription)?{??????super(context);??????//发送子线程??????mSenderThread?=?new?HandlerThread(RILSender);??????mSenderThread.start();??????Looper?looper?=?mSenderThread.getLooper();??????//mSender是发送子线程的Handler,通过他可以发送数据??????mSender?=?new?RILSender(looper);????????//接收子线程??????mReceiver?=?new?RILReceiver();??????mReceiverThread?=?new?Thread(mReceiver,?RILReceiver);??????mReceiverThread.start();??}??? ? ? ? 可以看到,在构造函数中开启了两个独立的子线程:mSenderThread用于给RILC发送数据,而mReceiverThread用于接收RILC上报的数据。? ? ? ? 下面我们分析两个子线程的处理流程。而在介绍他们之前,我们先来介绍以下在RIL层中传递的消息的格式:RILRequest。二、RILRequest? ? ? ? 我们单独拿出一小节来介绍RILRequest对象,是因为里面包含了我们在文章开始地方介绍的“消息异步传输”的秘密。? ? ? ? 首先来看他的属性:class RILRequest {},说明这是一个独立的类,没有继承任何的父类或接口。他也在RIL.java中,同时也是RIL.java中除了RIL外唯一的类。? ? ? ? 我们再来看一下RILRequest的构成:[java]?view plaincopyclass?RILRequest?{??????//令牌??????int?mSerial;??????int?mRequest;??????Message?mResult;??????Parcel?mp;??????RILRequest?mNext;????????//生成一个RILRequest的消息对象??????static?RILRequest?obtain(int?request,?Message?result)?{??????}??????//释放资源??????void?release()?{??????}??????//构造函数,内容为空??????private?RILRequest()?{??????}??????//重置令牌??????static?void?resetSerial()?{??????????sNextSerial.set(sRandom.nextInt());??????}??????//用于调试??????String?serialString()?{??????}??????//异常处理??????void?onError(int?error,?Object?ret)?{??????}??}??? ?
原创力文档

文档评论(0)