description: “移动数据连接 (Data Connection) 与 PDN 会话架构设计,深入剖析 DataNetwork 状态机、数据可用性评估引擎、重试退避算法、以及跨 APN 的并发管理策略。”
当手机完成网络注册(ServiceStateTracker 确定已注册到运营商网络)后,用户最关心的一件事就是:能不能上网?
数据连接模块负责在两端的设备之间建立基于 IP 的 PDN (Packet Data Network) 连接。在 Android 16 中,Google 对数据连接架构进行了大规模重构,引入了 DataNetworkController + DataNetwork 双层架构,取代了老版本的 DataConnection / DcTracker 体系。
设计理念: Android 16 的数据连接架构从老版本的"APN 类型为中心"彻底转变为"NetworkRequest 驱动"模式。每个
DataNetwork是一个独立的 PDN 会话(对应一个物理 IP 接口),DataNetworkController作为中央协调器,管理多个DataNetwork的生命周期。这一重构的核心思想是通过组合复用而非继承扩展——每个DataNetwork都自包含完整的状态机,而DataNetworkController只做调度和仲裁。
1. 核心职责
数据连接模块负责:
- PDN 会话建立与拆除:发起
setupDataCall到 Modem,获取 IP 地址并建立路由 - 数据可用性评估 (Data Evaluation):综合判断当前是否允许建立数据连接(如是否开启移动数据、是否在漫游、是否飞行模式等)
- 重试与退避 (Retry & Backoff):数据连接失败后的智能重试,指数退避避免信令风暴
- 切换 (Handover):数据连接在不同 RAT 之间的无缝切换(如 LTE → 5G 或 IWLAN ↔ WWAN)
- APN 管理:根据当前 RAT、漫游状态选择合适的 APN 配置
2. 核心类与源码锚点 (Source Code Anchors)
- [DataNetworkController.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataNetworkController.java):中央控制器(超过 4000 行)。每个 SIM 卡一个实例,负责管理所有
DataNetwork,受理 App 层的网络请求并进行数据可用性评估。 - [DataNetwork.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataNetwork.java):单一 PDN 会话的状态机(超过 4000 行)。核心状态:
Connecting → Connected → Disconnecting → Disconnected,同时支持Handover状态进行跨 RAT 切换。 - [DataProfileManager.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataProfileManager.java):DataProfile / APN 管理器。负责从
TelephonyProvider数据库中查询 APN 配置。 - [DataRetryManager.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataRetryManager.java):重试管理器(超过 1100 行)。实现指数退避、限流(Throttling)等多种重试策略。
- [DataServiceManager.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataServiceManager.java):底层数据传输服务(
IDataService)管理器,负责与TelephonyDataService(HAL 层) 交互。 - [DataConfigManager.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataConfigManager.java):数据连接配置管理器,管理如
anomalyNetworkConnectingTimeout等超时参数。
3. Google 设计技巧深入分析
3.1 DataNetwork 状态机 — 每个 PDN 会话自包含
DataNetwork 是每个 PDN 会话的完整状态机实现,继承自 Android 框架的 StateMachine:
源码 [DataNetwork.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataNetwork.java#L171) 中:
public class DataNetwork extends StateMachine {
private final ConnectingState mConnectingState = new ConnectingState();
private final ConnectedState mConnectedState = new ConnectedState();
private final DisconnectingState mDisconnectingState = new DisconnectingState();
private final DisconnectedState mDisconnectedState = new DisconnectedState();
private final HandoverState mHandoverState = new HandoverState();
}
518



被折叠的 条评论
为什么被折叠?



