网络连接评分机制之NetworkMonitor(原)

        本节介绍一个比较特殊的流程,就是网络可用性对评分的影响。

        该影响主要体现在,当一个网络连接建立时,系统将用该连接Ping一个Google的网站来判断该连接是否真的可以上网,如果不可以,那么就会扣掉该网络40分,从而可能导致该网络的评分低于其他网络评分,下面来看详细过程。


一、NetworkMonitor来源


        在前面《 网络连接评分机制之NetworkAgent》我们分析过,当某个NetworkFactory连接上网络时,就会创建NetworkAgent对象,然后注册到ConnectivityService,而在注册过程中,ConnectivityService将会利用NetworkAgent传递过来的NetworkInfo、Messenger、分值等信息创建NetworkAgentInfo对象。而在该对象的创建过程中,将会创建一个网络监听器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是ConnectivityService用于管理网络连接状态而创建的状态机,主要作用就是检测当前网络的有效性。
        下面我们来看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
  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值