news 2026/6/8 8:22:37

多 SIM 协作 (DSDS/DSDA) 架构文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多 SIM 协作 (DSDS/DSDA) 架构文档

description: “Android 16 多SIM协作(DSDS/DSDA) 完整架构,涵盖 Slot/Phone/SubId 三层映射、PhoneSwitcher 数据卡切换策略、ProxyController Radio能力协调、MultiSimSettingController 群组设置同步、CBRS 自动数据切换、紧急呼叫 DDS 覆盖等核心机制。”

1. 概述

多 SIM 卡协作是 Android 16 Multi-SIM 子系统(DSDS — Dual SIM Dual Standby,DSDA — Dual SIM Dual Active)的核心。它解决了多个 SIM 卡共存时的数据路线仲裁、Radio 资源分配、订阅设置同步等关键问题。

在 Android 16 中,多 SIM 协作由以下核心组件组成:

组件职责模式
PhoneSwitcher决定哪个 Phone 承载默认数据连接,管理 PS Attach 状态数据路线仲裁者
ProxyController协调多 Phone 间的 Radio Access Family 变更,确保资源分配一致性Radio 资源协调者
MultiSimSettingController同步分组订阅的移动数据和漫游设置,管理主订阅规则设置同步器
SubscriptionManagerService管理 SlotId → SubId → PhoneId 三层映射,用户可配置的默认语音/短信/数据卡订阅管理器

1.1 三层 ID 映射

框架层

逻辑层

物理层

插入 SIM 卡

eSIM + 1 pSIM

eSIM + 1 pSIM

Slot 0
(硬件卡槽)

Slot 1
(硬件卡槽)

SubId 1
(电话号 +138****)

SubId 2
(电话号 +139****)

SubId 3
(eSIM Profile)

Phone[0]
(GsmCdmaPhone)

Phone[1]
(GsmCdmaPhone)

PhoneId = SlotId
SubId 由 SubscriptionManagerService 动态分配
PhoneId 固定与 Slot 绑定

2. 核心类与源码锚点

路径职责
PhoneSwitcher.javaframeworks/opt/telephony/.../data/PhoneSwitcher.java(2100+ 行)数据路线仲裁器:Preferred Data PhoneId 维护、PS Attach 管理、紧急呼叫 DDS 覆盖
ProxyController.javaframeworks/opt/telephony/.../ProxyController.java(500+ 行)Radio 能力协调器:setRadioCapability() 事务管理、双 CDMA 冲突检测、跨 Phone 同步
MultiSimSettingController.javaframeworks/opt/telephony/.../MultiSimSettingController.java(600+ 行)设置同步器:分组订阅的移动数据/漫游设置同步
SubscriptionManagerService.javaframeworks/opt/telephony/.../subscription/SubscriptionManagerService.java订阅管理器:管理 SubId 到 PhoneId/SlotId 的映射
CellularNetworkValidator.javaframeworks/opt/telephony/.../data/CellularNetworkValidator.java网络验证器:数据卡切换前验证目标网络可用性
AutoDataSwitchController.javaframeworks/opt/telephony/.../data/AutoDataSwitchController.java自动数据切换控制器:基于信号强度/网络状态自动切换数据卡

3. PhoneSwitcher — 数据路线仲裁器

PhoneSwitcher是 Multi-SIM 的核心枢纽,回答一个问题:当前应该由哪个 Phone 承载 Internet 数据连接?

3.1 核心状态变量

publicclassPhoneSwitcherextendsHandler{// 用户设置的主数据订阅protectedintmPrimaryDataSubId=SubscriptionManager.INVALID_SUBSCRIPTION_ID;// 系统自动建议的数据订阅(CBRS/自动切换功能)privateintmAutoSelectedDataSubId=SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;// 正在进行语音通话的 Phone IDprotectedintmPhoneIdInVoiceCall=SubscriptionManager.INVALID_PHONE_INDEX;// 最终决定的数据 Phone ID(综合考虑以上因素)protectedintmPreferredDataPhoneId=SubscriptionManager.INVALID_PHONE_INDEX;// 对应的 SubIdprotectedWatchedIntmPreferredDataSubId=newWatchedInt(INVALID_SUBSCRIPTION_ID);// 紧急呼叫 DDS 覆盖请求privateEmergencyOverrideRequestmEmergencyOverride;}

3.2 数据 Phone ID 的决策逻辑

updatePreferredDataPhoneId()体现了多因素综合仲裁的设计思想:

protectedvoidupdatePreferredDataPhoneId(){// 优先级 1:紧急呼叫 DDS 覆盖(最高优先级)if(mEmergencyOverride!=null){mPreferredDataPhoneId=mEmergencyOverride.mPhoneId;return;}// 优先级 2:语音通话中的 Phoneif(isAnyVoiceCallActiveOnDevice()){intimsRegTech=mImsRegTechProvider.get(mContext,mPhoneIdInVoiceCall);if(imsRegTech!=REGISTRATION_TECH_IWLAN){if(imsRegTech!=REGISTRATION_TECH_CROSS_SIM){// 通话 Phone 需要数据同步 → 将数据切到通话 PhonemPreferredDataPhoneId=shouldSwitchDataDueToInCall()?mPhoneIdInVoiceCall:getFallbackDataPhoneIdForInternetRequests();}else{// Cross-SIM IMS 通话 → 数据不切换,保持原 Phone
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 8:20:41

C#反编译工具横评:dotPeek、ILSpy、dnSpy到底怎么选?附.NET 8实战对比

C#反编译工具深度评测:dotPeek、ILSpy、dnSpy在.NET 8环境下的实战表现 当你在深夜面对一个神秘的.NET程序集,试图理解它的内部逻辑时,反编译工具就像一盏照亮黑暗的灯。作为.NET开发者,我们经常需要借助这些工具来学习优秀代码、…

作者头像 李华
网站建设 2026/6/8 8:20:07

第32章:AI辅助去中心化身份(DID)——链上可验证凭证

本章你将收获:去中心化身份(DID)的核心概念与架构;链上可验证凭证(Verifiable Credentials)的流转流程;使用EIP-712签名实现可验证凭证的签发、持有、验证全流程;AI辅助生成凭证模板、自动验证用户身份属性;实战:构建一个完整的DID系统,包括DID注册、凭证签发、链上…

作者头像 李华
网站建设 2026/6/8 8:11:18

VisualSVN企业授权检测原理浅析与dnSpy调试实战

VisualSVN企业授权检测机制深度解析与动态调试实战在软件开发团队协作中,版本控制系统扮演着至关重要的角色。虽然Git已成为当前主流选择,但仍有不少企业基于历史原因或项目特性继续使用SVN。VisualSVN作为Visual Studio的SVN插件,因其无缝集…

作者头像 李华