【Android】Android 网络评分策略简述

一、初始评分设定

以太网默认评分

frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java

private static final int NETWORK_SCORE = 70;                         // 以太网默认评分
mFactory.setScoreFilter(up ? NETWORK_SCORE : -1); 

wifi默认评分

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java

mNetworkFactory.setScoreFilter(60);                                        // WIFI默认评分

移动网络默认评分

frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java

private final static int TELEPHONY_NETWORK_SCORE = 50;    // 移动网络默认评分
setScoreFilter(TELEPHONY_NETWORK_SCORE);

1、从分值看出默认的优先级是:以太网 > WIFI > 移动网络,实际测试也是如此。
2、NetworkFactory作为网络评分机制中一个重要角色而存在,每个模块实现需要继承NetworkFactory;
3、各个网络的 NetworkFactory 在初始化的时候,都要调用 setScoreFilter 设置评分,然后调用 register() 注册,注册后才能参与评分。

二、动态网络评分

系统运行过程中各个网络的评分值是会发生变化的,需要动态更新评分值。各个网络更新分值的接口如下:

  • 以太网
public void updateAgent() {
	        mNetworkAgent.sendNetworkScore(mLinkUp? NETWORK_SCORE : 0);
}
  • WIFI
public static WifiScoreReport calculateScore() {
	        networkAgent.sendNetworkScore(score);
}
  • 移动网络
sendUpdatedScoreToFactories() {
		        sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score, 0, networkRequest);
}

1、networkAgent 的 sendNetworkScore 方法都会调用到 queueOrSendMessage(EVENT_NETWORK_SCORE_CHANGED, new Integer(score));
2、EVENT_NETWORK_SCORE_CHANGED 消息会在 updateNetworkScore 中处理,然后通过 sendUpdatedScoreToFactories->sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score, 0, networkRequest) 发送请求。
3、CMD_REQUEST_NETWORK 消息会在 handleAddRequest 中统一处理,如下:
在这里插入图片描述
在这里插入图片描述

三、评分策略

评分策略的核心就是 evalRequest。
这个接口中会根据将请求网络的分值"n.score"和当前网络的评分值"mScore"进行PK。根据PK结果,调用needNetworkFor()建立网络,或者调用releaseNetworkFor释放网络。
在这里插入图片描述

更详细的过程参考:https://blog.csdn.net/kris_fei/article/details/75669671

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值