Android 6.0 与 Android 7.0 Data Call Retry对比

2018-02-27 11:24:01来源:oschina作者:遇逆境-处之泰然人点击

分享
0 预备知识data call(简写 DC)指数据业务, 手机需要上网必须开启的业务
APN 的作用:手机上网必须要配置的一个参数,决定手机通过哪种接入方式来访问网络,APN 的类型: default(默认是 GPRS 上网)、 mms、 dun、 ims 等 1. DC重试的差异

Android 从 6.0 升级到 7.0 后,删除了 DataConnetion 中 mRetryingState 状态,此状态能够维护 DC 重试; 7.0 删除该状态后,现在的方案是建立 DC 失败后,在 onDataSetupCompleteError()中进行重试连接。


2 Android 6.0 DC Retry 机制

Android 6.0 通过状态机来维护 DC 的几种状态,其中包含 DcRetryingState状态,在这种状态下,它能够实现 DC 建立失败后重试, 接下来看下 DC retry 在Android 6.0 上的流程,见图 2-1。单 pdn 时,会出现去断开所有链接的情况,当其他连接全部断开后,会重新去建立 DC。



3 Android 7.0 DC Retry 流程

在 Android7.0 中, DC retry 流程与 Android6.0 相比,有了一点改变,不在由专门的 Retry 状态机来维护,见图 3-1。


4 Retry时间间隔的设置
4.1定义的 Retry 的时间间隔

一般情况下,直接从 CarrierConfigManager.java 中可以进行配置, 见以下代码 :


static {
......
Defaults.putString(KEY_CARRIER_DATA_CALL_RETRY_CONFIG_DEFAULT_STRING,
"default_randomization=2000,5000,10000,20000,40000,80000:5000,160000:5000,"+
"320000:5000,640000:5000,1280000:5000,1800000:5000");
......
}

另一种方法, 如果在 APP 进行了配置, 那么,会优先使用在 APP 配置的retry 时间间隔, APP PATH: packages/apps/CarrierConfig/assets/carrier_config_*****.xml。


<?xml version='1.0' encoding='utf-8' standalone='yes' ?>



......

default_randomization=2000,5000,10000,20000,40000,80000:5000,160000:5000,320000:5000,640000:5000,1280000:5000,1800000:5000,3600000:5000



4.2 从字符串中解析出时间间隔

关于如何解析字符串,可以参照 RetryManager.java 中的 configure(StringconfigStr)方法,这里主要介绍的一点是 RetryForever 的设定,从上面定义的字符串中可以看出"max_retries=infinite",如果解析出这两个字符串存在的话, mRetryForever = true; 也就是永久 retry。


private void configureRetry(boolean forDefault) {
String configString = "";
......
CarrierConfigManager configManager = (CarrierConfigManager)
mPhone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
PersistableBundle b = configManager.getConfigForSubId(mPhone.getSubId());
......
if (forDefault) {
configString = b.getString(
CarrierConfigManager.KEY_CARRIER_DATA_CALL_RETRY_CONFIG_DEFAULT_STRING,
DEFAULT_DATA_RETRY_CONFIG);
}
......
configure(configString);
}

华丽分割线


-------------------------------------------------------------------------------------------------------------


以上差异导致了Android N上出现了一个bug,见我的另一篇文章:Bug Fixed--Android N Data Call Retry 时间间隔不能有效增加

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台