1、介绍
本文用于说明
AndroidO Do Revovery 功能客制化说明,包括 feature 功能描述,修改的代码,feature 开关及如何客制化。
数据收发包发生异常时,会进入 Do Recovery 模式进行数据恢复,这个 feature 可以通过属性控制来订制需要执行到数据恢复的哪一步。
1.2. 定义和缩写
RecoveryAction,GET_DATA_call_LIST(0) | 査询当前数据连接状态 |
RecoveryAction.CLEANUP (1) | 断开当前数据连接重新激活 |
RecoveryAction.REREGISTER (2) | reattach PS |
RecoveryAction.RADIO REstart (3) | restart radio |
RecoveryAction.RADIO_RESTART_WITH_PROP (4) | reset Modem |
2、Detail
2.1. Concept
数据连接建立成功之后会统计数据收发包的情况,其中包括 TCP 数据包以及 UDP 数据包,当数据包收发异常,只有发包没有收包,即只有上行数据没有下行数据的情况时,将对异常数据包进行累计,当其数量达到一个门限值时(目前该门限值设置为 10)时,就会启动数据恢复机制

o Recovery
每次触发 Do Recovery 机制后会执行一个 Action 去做具体的数据恢复工作,其中包括:
1.查询数据连接状态,对应 RecoveryAction.GET_DATA_CALL_LIST 对应的值为 0
2.断开当前数据连接重新激活,对应 RecoveryAction.CLEANUP 对应的值为 1
3.PS 重新 attach,对应 RecoveryAction.REREGISTER 对应的值为 2
4.重启协议栈,对应 RecoveryAction.RADIO_RESTART 对应的值为 3
5.重置 modem,对应 RecoveryAction.RADIO_RESTART_WITH_PROP 对应的值
为 4
以上几个 Action 可以通过属性 persist.radio.dataconn.recovery 进行客制化,该属性默认为-1,即没有对 Do Recovery Action 进行特别设定,数据恢复流程会按照上述五种Action 依次执行.如果对该属性进行设定,那么会按照设定的顺序执行.具体过程如下:
默认值为-1:执行步骤 0、1、2、3、4、0、1、2、3、4………
值为 0:执行步骤 0、0、0、0、0、0、0、0、0、0……(如果设置为这个值,相当于不去做数据恢复)
值为 1:执行步骤 0、1、1、1、1、1、1、1、1、1……
值为 2:执行步骤 0、1、2、2、2、2、2、2、2、2 ……
值为 3:执行步骤 0、1、2、3、3、3、3、3、3、3 ……
值为 4:执行步骤 0、1、2、3、4、4、4、4、4、4 ……
2.2. Function Blocks
Do Recovery 数据恢复机制对应的代码逻辑在如下文件之中:
Frameworks/opt/
Telephony/src/
Java/com/android/internal/telephony/dataconnection/DcTracker.java
通过接收广播 com.android.internal.telephony.data-stall 调用 onDataStallAl
arm()统计数据收发包情况,如果统计的 mSentSinceLastRecv 达到门限值 hangWatchdogTrigger,则调用doRecovery()方法进行数据恢复.并且通过调用 putRecoveryActionWithConfig()
方法获取 persist.radio.dataconn.recovery 属性值.
其中 8.1 版本,persist.radio.dataconn.recovery 属性配置在 board 中,例如:
claro 版本上,该属性配置在如下文件中:
vendor/sprd/feature_configs/claro/config.mk
Telephony客制化文档—Do Recovery功能.pdf
(293.41 KB, 下载次数: 0)