本节介绍一个比较特殊的流程,就是网络可用性对评分的影响。
下面我们来看NetworkMonitor的属性与初始化流程:
该影响主要体现在,当一个网络连接建立时,系统将用该连接Ping一个Google的网站来判断该连接是否真的可以上网,如果不可以,那么就会扣掉该网络40分,从而可能导致该网络的评分低于其他网络评分,下面来看详细过程。
一、NetworkMonitor来源
@ConnectivityService.java
public void registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo, LinkProperties linkProperties, NetworkCapabilities networkCapabilities, int currentScore, NetworkMisc networkMisc) {
//注册NetworkAgent时需要创建NetworkAgentInfo
NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
new NetworkInfo(networkInfo), new LinkProperties(linkProperties),
new NetworkCapabilities(networkCapabilities), currentScore, mContext, mTrackerHandler,
new NetworkMisc(networkMisc));
synchronized (this) {
nai.networkMonitor.systemReady = mSystemReady;
}
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_AGENT, nai));
}
这就是我们所说的注册NetworkAgent时所创建的NetworkAgentInfo对象,然后来看该对象的属性:
public class NetworkAgentInfo {}
再来看他提供的方法:
public void addRequest(NetworkRequest networkRequest) {}
public int getCurrentScore() {}
public void setCurrentScore(int newScore) {}
public String toString() {}
public String name() {}
然后来看NetworkAgentInfo创建过程:
@NetworkAgentInfo.java
public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, NetworkInfo info, LinkProperties lp, NetworkCapabilities nc, int score, Context context, Handler handler, NetworkMisc misc) {
//各种赋值
this.messenger = messenger;
asyncChannel = ac;
network = null;
networkInfo = info;
linkProperties = lp;
networkCapabilities = nc;
currentScore = score;
//创建NetworkMonitor
networkMonitor = new NetworkMonitor(context, handler, this);
networkMisc = misc;
created = false;
validated = false;
}
从这些信息我们看到,NetworkAgentInfo没有继承其他类,同时也只是提供了一些设置或者查询当前对象属性的一些方法,该对象的
主要作用也就是保存各个向ConnectivityService注册的NetworkAgent,以便于查询或修改某个NetworkAgent对象的相关信息。
但是从NetworkAgentInfo的构造方法中我们看到他创建了一个NetworkMonitor对象,那么该对象的作用是什么呢?
二、NetworkMonitor作用与初始化流程
下面我们来看NetworkMonitor的属性与初始化流程:
@NetworkMonitor.java
public class NetworkMonitor extends StateMachine {}
public NetworkMonitor(Context context, Handler handler, NetworkAgentInfo networkAgentInfo) {
super(TAG + networkAgentInfo.name());
//初始化各种成员变量
mContext = context;
mConnectivityServiceHandler = handler;
mNetworkAgentInfo = networkAgentInfo;
mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mAlarmManager = (AlarmManager) context.getSyste