一、修改点一:NetworkFactoryImpl.java
文件路径:
frameworks/libs/net/common/device/android/net/NetworkFactoryImpl.java
改动内容
在 handleRemoveRequest() 中增加 系统属性开关,用于控制是否允许释放网络请求。
private void handleRemoveRequest(NetworkRequest request) {
// start
boolean isNetworkCoexistEnabled = SystemProperties.getBoolean(
"persist.sys.network_coexistence", false
);
if (!isNetworkCoexistEnabled) {
return; // 网络共存开启时,禁止移除网络请求
}
// end
NetworkRequestInfo n = mNetworkRequests.get(request);
if (n != null) {
mNetworkRequests.remove(request);
if (n.requested) mParent.releaseNetworkFor(n.request);
}
}
效果
- 当
persist.sys.network_coexistence=false→ 维持原有行为,正常释放网络。 - 当
persist.sys.network_coexistence=true→ 阻止网络请求移除,保留多网络共存。
二、修改点二:ConnectivityService.java
文件路径:
packages/modules/Connectivity/service/src/com/android/server/ConnectivityService.java
改动内容 1:延时断开逻辑
原本系统在超时后会强制调用 nai.disconnect() 断开网络。
修改后,加入属性判断:
mHandler.postDelayed(() -> {
// start
boolean isReleaseNetwork = SystemProperties.getBoolean(
"persist.sys.network_coexistence", false
);
Log.e(TAG, "disconnect isReleaseNetwork = " + isReleaseNetwork);
if (!isReleaseNetwork) {
return; // 阻止断开,保持网络共存
}
// end
nai.disconnect();
}, timeoutMs);
改动内容 2:直接断开逻辑
在某些地方系统会直接调用 nai.disconnect(),这里也加入开关:
// start
boolean isReleaseNetwork = SystemProperties.getBoolean(
"persist.sys.network_coexistence", true
);
Log.e(TAG, "disconnect isReleaseNetwork = " + isReleaseNetwork);
if (!isReleaseNetwork) {
return; // 阻止断开
}
// end
nai.disconnect();
三、整体机制
通过 SystemProperties 定义全局开关:
- 属性名:
persist.sys.network_coexistence - 默认值:
false(保持 Android 原生行为,即单网络模式) - 开启值:
true(允许多网络同时存在,不主动断开)
四、应用场景
- 车机系统:同时保持 4G 蜂窝网络 与 热点共享,保证车载服务与热点用户同时可用。
- 嵌入式平板:在使用 VPN 专网 的同时,保持蜂窝/以太网不被断开。
- 开发/测试环境:便于同时监控不同网络链路的行为。
五、总结
本改动通过在 NetworkFactoryImpl 与 ConnectivityService 的网络释放逻辑中加入 SystemProperties 开关,实现了「可控的网络共存」。
- 默认情况下,系统行为不变,保持 Android 原生的网络优先与切换机制。
- 当设置
persist.sys.network_coexistence=true时,系统不再主动释放已有网络,达到 多网络共存 的效果。
1619

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



