赞
踩
目录
5.2 setupDataOnAllConnectableApns调用分析
拨号分析也就是数据业务如何建立起来,本文档用于分析及总结拨号的流程,用于后面快速定位RIL拨号这块出现的问题。
从流程图来看,调用很清楚,但重点在DataService里并没有去真正实现setupDataCall功能,而是通过其他provider类继承他实现setupDataCall功能。通过继承特性,我们可以看出,这个设计意思是后面计划有可能多个provider,但实际代码搜了下,目前只有CellularDataServiceProvider,可能框架先做好,后面想添加时,直接实现就行。从这里看出,大老设计的代码就是优秀,普通人不会想那么长远。这也体现了代码的艺术。
从类图层次来看,拨号可分为4层,自上到下分别为Data应用、Data接口、Data服务、RILJ。
Data应用:重点由DcTracker、ServiceStateTracker和DataConnecion 3个类组成。ServiceStateTracker用于处理当前的网络状态,如data voice 信号等。DcTracker用于拨号的逻辑处理流程,如是否打开数据业务,APN组装等。DataConnection是拨号的一个状态机。DataServiceManager用于提供DataService的接口。
Data接口:封装服务对外提供的接口,按设计模式的思路是外面不需要关心具体的接口如何实现,只管调用。
Data服务:此处可以再细分为提供者和服务。提供者由CellularDataServiceProvider和CellularDataService组成,从类图可以看出,都是继承了服务里的相关类;服务重点由DataService组成。DataService用于提供拨号的相关服务,DataServiceProvider和IDataServiceWrapper通过向DataServiceHandler发Message消息进行相关逻辑处理,IDataServiceWrapper是实现AIDL接口,也就是对外提供的服务接口。
RILJ用于向RILD处下RIL消息,本文档不重点介绍此处功能。
完整拨号的时序图如下。
在RILJ 的4个网络状态operator、voice、data、selection mode查询时,会触发对应的handle消息然后调用handlePollStateResult,见如下代码:
- case EVENT_POLL_STATE_CS_CELLULAR_REGISTRATION:
- case EVENT_POLL_STATE_PS_CELLULAR_REGISTRATION:
- case EVENT_POLL_STATE_PS_IWLAN_REGISTRATION:
- case EVENT_POLL_STATE_OPERATOR:
- ar = (AsyncResult) msg.obj;
- handlePollStateResult(msg.what, ar);
- break;
-
- case EVENT_POLL_STATE_NETWORK_SELECTION_MODE:
- if (DBG) log("EVENT_POLL_STATE_NETWORK_SELECTION_MODE");
- ar = (AsyncResult) msg.obj;
- if (mPhone.isPhoneTypeGsm()) {
- handlePollStateResult(msg.what, ar);
- } else {
- if (ar.exception == null && ar.result != null) {
- ints = (int[])ar.result;
- if (ints[0] ==
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。