流程以及解决办法如下
//packages/modules/Connectivity/service/src/com/android/server/ConnectivityService.java
registerNetworkAgent
->registerNetworkAgentInternal
->mDeps.getNetworkStack().makeNetworkMonitor(
nai.network, name, new NetworkMonitorCallbacks(nai));//注册监听
->notifyNetworkTestedWithExtras //监听回调
->mTrackerHandler.sendMessage(msg);//EVENT_NETWORK_TESTED
->handleNetworkTested
->updateCapabilities
->rematchAllNetworksAndRequests
->rematchNetworksAndRequests
->computeNetworkReassignment
->addRequestReassignment//差异点
->bestNetwork = mNetworkRanker.getBestNetwork
(req, nais, nri.getSatisfier());
//此处总是返回wifi
//改为根据评分高低返回网络类型即可完成网络更新
->applyNetworkReassignment
->processDefaultNetworkChanges
->final NetworkReassignment.RequestReassignment reassignment =changes.getReassignment(defaultRequestInfo);
//对比changes内容发现未更改,因此返回空导致不更新
->makeDefault//设置为默认网络
->updateLegacyTypeTrackerAndVpnLockdownForRematch
//发送广播更新网络状态
->final NetworkReassignment.RequestReassignment reassignmentOfDefault =
changes.getReassignment(mDefaultRequest);//为空导致更新失败
->mLegacyTypeTracker.remove
->mLegacyTypeTracker.add