解释TelephonyNetworkFactory中关于评分的部分.
1.下面是TelephonyNetworkFactory中一些关键的方法和属性,主要关注下AsyncChannel里面的mSrcHandler,mSrcMessenger,mDstMessenger.
2.下面流程中主要关注一些属性变化.
mNetworkFactoryInfos 主要是在申请注册NetwrokFactory的时候添加
mNetworkFactoryInfos 主要是在申请注册NetwrokFactory的时候添加
private final HashMap<Messenger, NetworkFactoryInfo> mNetworkFactoryInfos =
new HashMap<Messenger, NetworkFactoryInfo>();
private void handleRegisterNetworkFactory(NetworkFactoryInfo nfi) {
if (DBG) log("Got NetworkFactory Messenger for " + nfi.name);
mNetworkFactoryInfos.put(nfi.messenger, nfi);
nfi.asyncChannel.connect(mContext, mTrackerHandler, nfi.messenger);
}
`mNetworkRequests 主要是在
1.ConnectivityService初始化的时候添加默认的default request
2.当通过ConnectivityManager来requestnetwork的时候添加(申请建立数据业务).
private final HashMap<NetworkRequest, NetworkRequestInfo> mNetworkRequests =
new HashMap<NetworkRequest, NetworkRequestInfo>();
1.ConnectivityService初始化的时候添加默认的default request
mNetworkRequests.put(mDefaultRequest, defaultNRI);
2.当通过ConnectivityManager来requestnetwork的时候添加(申请建立数据业务)..
private void handleRegisterNetworkRequest(NetworkRequestInfo nri) {
mNetworkRequests.put(nri.request, nri);
mNetworkRequestInfoLogs.log("REGISTER " + nri);
if (nri.request.isListen()) {
for (NetworkAgentInfo network : mNetworkAgentInfos.values()) {
if (nri.request.networkCapabilities.hasSignalStrength() &&
network.satisfiesImmutableCapabilitiesOf(nri.request)) {
updateSignalStrengthThresholds(network, "REGISTER", nri.request);
}
}
}
rematchAllNetworksAndRequests(null, 0);
if (nri.request.isRequest() && mNetworkForRequestId.get(nri.request.requestId) == null) {
sendUpdatedScoreToFactories(nri.request, 0);
}
}
mNetworkForRequestId 主要是在数据业务建立成功后进行添加.
private final SparseArray<NetworkAgentInfo> mNetworkForRequestId =
new SparseArray<NetworkAgentInfo>();
private void handleRegisterNetworkAgent(NetworkAgentInfo na) {
if (VDBG) log("Got NetworkAgent Messenger");
mNetworkAgentInfos.put(na.messenger, na);
synchronized (mNetworkForNetId) {
mNetworkForNetId.put(na.network.netId, na);
}
na.asyncChannel.connect(mContext, mTrackerHandler, na.messenger);
NetworkInfo networkInfo = na.networkInfo;
na.networkInfo = null;
updateNetworkInfo(na, networkInfo);
}
