Framework中的Ril源码分析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Framework中的Ril源码分析

Framework中的Ril源码分析目录(?)[-]一概述二RILRequest三发送子线程如何把数据发送到mSenderThreadmSenderThread子线程把请求发送给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) { } } 这个类并不复杂,主要的包括一些成员变量和两个重要的成员函数:用于生成消息对象的obtain方法和用于释放对象的release方法。我们先来介绍他的成员变量: mSerial:这个变量就是一个令牌,每生成(obtain)一个新的请求,都将产生一个递增的、唯一的mSerial,当从RILC得到一个数据后, 我们将通过mSerial找到当初发送这个请求的对象。这也就是异

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档