标签:java NETWORK 评分 网络 默认 简述 SCORE 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
标签:java,NETWORK,评分,网络,默认,简述,SCORE,Android 来源: https://blog.csdn.net/rentong123/article/details/120450716
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。