Android连接管理的评分机制(WIFI,Ethernet,BT,移动数据
2023-09-14 09:09:54 时间
Android可以支持:移动数据网络、WIFI、蓝牙、网线等,这些连接本身都可以独立使用,连接管理通过一个评分机制来实现不同接入方式的选择。具体来说就是,每一种上网方式在初始化时,都向ConnectivityService标明自己网络的分值(比如数据连接50,WIFI60,蓝牙69,网线70),当有更高分数的网络就绪时,就将当前分值低的连接断开。而当当前网络被断开时,就寻找当前就绪的其他网络连接,选取分值高的进行接入。并且,每一个网络接入时,都会进行有效性检测,如果检测不通过,将会被扣掉一定分数,此时该网络的优先级也会相应的下降。以下是Ethernet和Wifi连接管理评分的更新流程。
【1】frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
private static final int NETWORK_SCORE = 70;//以太网
【2】frameworks/base/core/java/android/net/NetworkAgent.java
public static final int WIFI_BASE_SCORE = 60;
【3】packages/apps/Bluetooth/src/com/android/bluetooth/pan/BluetoothTetheringNetworkFactory.java
private static final int NETWORK_SCORE = 69;//蓝牙
【4】frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
private final static int TELEPHONY_NETWORK_SCORE = 50;//移动数据
public TelephonyNetworkFactory(){
setScoreFilter(TELEPHONY_NETWORK_SCORE);
}
1.Ethernet的连接评分
<1>.frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
public void updateAgent() {
private static final int NETWORK_SCORE = 70;//以太网的初始评分,分数越高,优先连接
// never set the network score below 0.
mNetworkAgent.sendNetworkScore(mLinkUp? NETWORK_SCORE : 0);
}
<2>.Wifi的连接评分
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiScoreReport.java
public static WifiScoreReport calculateScore(){
public static final int WIFI_BASE_SCORE = 60;//Wifi的初始评分
networkAgent.sendNetworkScore(score);
}
2.frameworks/base/core/java/android/net/NetworkAgent.java
public void sendNetworkScore(int score) {
queueOrSendMessage(EVENT_NETWORK_SCORE_CHANGED, new Integer(score));
}
3.frameworks/base/services/core/java/com/android/server/ConnectivityService.java
<1>.case NetworkAgent.EVENT_NETWORK_SCORE_CHANGED: {
updateNetworkScore(nai, score.intValue());
}
<2>.private void updateNetworkScore(NetworkAgentInfo nai, int score) {
final int oldScore = nai.getCurrentScore();
log("OldScore = " + OldScore + " newScore = " + String.valueOf(score) );
}
相关文章
- 74款android开机动画,修改Android系统开机动画
- 基于chromium for android开发Android浏览器
- android 的hook技术,Android Native Hook技术(一)
- android中适配器的作用,适配器模式 在Android中的简单理解「建议收藏」
- android进阶之了解Android系统与开机过程
- mac 电脑android环境变量设置,mac上Android环境变量配置[通俗易懂]
- robotium android,Robotium 测试Android apk安装包
- WiFi频段_wifi工作频段
- Android开发笔记(一百八十八)工作管理器WorkManager
- android 系统浏览器 源码-Android 最最最简单的浏览器代码
- android ANR产生原因和解决办法
- 【错误记录】p7zip 交叉编译 Android 版本 NDK 报错 ( error: case value evaluates to -2 , which cannot be narrowed )
- 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )
- 【Android UI】贝塞尔曲线 ① ( 一阶贝塞尔曲线 | 二阶贝塞尔曲线 )
- Android MVP 代码自动生成插件开发
- Android最新Glide 4.0使用简介详解手机开发
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- Hijacker:一款All-in-One型的Android端WiFi破解工具
- Linux如何链接WiFi:步骤简单易懂(linux链接wifi)
- 如何在Linux系统下创建WiFi网络(linux创建wifi)
- 谷歌发布Android系统年度安全报告,一半的设备一年都没收到安全更新
- 在Android模拟器上模拟GPS功能总是null的解决方法
- android使用webwiew载入页面使用示例(HybridApp开发)