android.net.conn.CONNECTIVITY_CHANGE_IMMEDIATE和android.net.conn.CONNECTIVITY_CHANGE

android.net.conn.CONNECTIVITY_CHANGE_IMMEDIATE和android.net.conn.CONNECTIVITY_CHANGE的区别

前言

上班的时候遇到个问题,在android低版本上,我的网络连接成功时会接到两个广播,android.net.conn.CONNECTIVITY_CHANGE_IMMEDIATE
android.net.conn.CONNECTIVITY_CHANGE
那么问题来了,这两个广播的区别是什么呢?我在网上找了半天,都没找到,还是得在代码里翻。

正文

网络连接时
ConnectivityService.java 会调用 handleConnect()方法

该方法里的 sendConnectedBroadcastDelayed(info, getConnectivityChangeDelay());
就是发送这两个广播的地方。

 private void sendConnectedBroadcastDelayed(NetworkInfo info, int delayMs) {
        Log.v("gaomh","sendConnectedBroadcastDelayed");
        sendGeneralBroadcast(info, CONNECTIVITY_ACTION_IMMEDIATE);
        sendGeneralBroadcastDelayed(info, CONNECTIVITY_ACTION, delayMs);
    }

//delayMs 默认时间是三秒

 
 private int getConnectivityChangeDelay() {
        final ContentResolver cr = mContext.getContentResolver();

        /** Check system properties for the default value then use secure settings value, if any. */
        int defaultDelay = SystemProperties.getInt(
                "conn." + Settings.Global.CONNECTIVITY_CHANGE_DELAY,
                ConnectivityManager.CONNECTIVITY_CHANGE_DELAY_DEFAULT);
        return Settings.Global.getInt(cr, Settings.Global.CONNECTIVITY_CHANGE_DELAY,
                defaultDelay);
    }

官方对于这个delay时间的解释是:
Default value for {@link Settings.Global#CONNECTIVITY_CHANGE_DELAY} in
* milliseconds. This was introduced because IPv6 routes seem to take a
* moment to settle - trying network activity before the routes are adjusted
* can lead to packets using the wrong interface or having the wrong IP address.
* This delay is a bit crude, but in the future hopefully we will have kernel
* notifications letting us know when it’s safe to use the new network.

{@link settings.global“connectivity”更改“delay”的默认值(毫秒)。这是因为ipv6路由似乎需要花一点时间来解决-在调整路由之前尝试网络活动可能会导致数据包使用错误的接口或具有错误的ip地址。

这个延迟有点粗糙,但希望将来我们会有内核通知让我们知道何时使用新网络是安全的。

结论

功能的角度看:android.net.conn.CONNECTIVITY_CHANGE_IMMEDIATE和
android.net.conn.CONNECTIVITY_CHANGE 没什么区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值