Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
NetworkFactory作为网络评分机制中一个重要角色而存在,每个模块实现需要继承NetworkFactory
当Wifi状态机初始化处于默认状态时,会注册WifiNetworkFactory
processMessage -> WifiStateMachine.java//DefaultState
maybeRegisterNetworkFactory
void maybeRegisterNetworkFactory() {
if (mNetworkFactory == null) {
//连接ConnectivityService
checkAndSetConnectivityInstance();
if (mCm != null) {
//继承自NetworkFactory
mNetworkFactory = new WifiNetworkFactory(getHandler().getLooper(), mContext,
NETWORKTYPE, mNetworkCapabilitiesFilter);
//设置评分为60,后面在分析evalRequest会看到
mNetworkFactory.setScoreFilter(60);
//所有的NetworkFactory注册到ConnectivityService才能参与评分机制
mNetworkFactory.register();
}
}
}
上面过程设置评分和注册两个步骤
设置评分:
setScoreFilter -> sendMessage(CMD_SET_SCORE) -> handleMessage-> handleSetScore
private void handleSetScore(int score) {
//当前的score为60,初始化时关键是设置一个mScore值作为Wifi模块的标准值
mScore = score;
//当任何一个网络的score有变化时,需要重新评分来判断是否需要切换网络
evalRequests();
}
mScore在后面evalRequest()会用到,用于比较ConnectivityService传进来的score而去决定request还是release网络
private void evalRequests() {
//暂时mNetworkRequests为空,不作用
for (int i = 0; i < mNetworkRequests.size(); i++) {
NetworkRequestInfo n = mNetworkRequests.valueAt(i);
evalRequest(n);
}
}
注册:
register -> registerNetworkFactory
NetworkFactory.java
public void register() {
if (DBG) log(