DetailedState.VERIFYING_POOR_LINK代表什么

lyn*_*570 8 java android

在Juice中,枚举DetailedState添加了一个名为的新状态

/** Link has poor connectivity. */
        VERIFYING_POOR_LINK
Run Code Online (Sandbox Code Playgroud)

但这个州的立场是什么?

搜索完整个项目后,我发现了这个:

WifiStateMachine.java中的子类VerifyingLinkState

class VerifyingLinkState extends State {
    @Override
    public void enter() {
        if (DBG) log(getName() + "\n");
        EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName());
        setNetworkDetailedState(DetailedState.VERIFYING_POOR_LINK);
        mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.VERIFYING_POOR_LINK);
        sendNetworkStateChangeBroadcast(mLastBssid);
    }
    @Override
    public boolean processMessage(Message message) {
        switch (message.what) {
            case WifiWatchdogStateMachine.POOR_LINK_DETECTED:
                //stay here
                break;
            case WifiWatchdogStateMachine.GOOD_LINK_DETECTED:
                try {
                    mNwService.enableIpv6(mInterfaceName);
                } catch (RemoteException re) {
                    loge("Failed to enable IPv6: " + re);
                } catch (IllegalStateException e) {
                    loge("Failed to enable IPv6: " + e);
                }

                setNetworkDetailedState(DetailedState.CONNECTED);
                mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.CONNECTED);
                sendNetworkStateChangeBroadcast(mLastBssid);
                transitionTo(mConnectedState);
                break;
            default:
                return NOT_HANDLED;
        }
        return HANDLED;
    }
}
Run Code Online (Sandbox Code Playgroud)

在验证链接状态时,在enter()函数中,它将DetailedState设置为

DetailedState.VERIFYING_POOR_LINK
Run Code Online (Sandbox Code Playgroud)

当连接真的很好时,这将导致用户对如下图所示的状态消息感到困惑. 在此输入图像描述

虽然此消息只停留一段时间,然后迅速替换为"已连接".但这个州的目标是什么?如果我没有在enter()功能中将DetailedState设置为VERIFYING_POOR_LINK,会有什么风险.

Fal*_*65o 0

VERIFYING_POOR_LINK对于某些三星设备来说,它是 Wi-Fi 的一部分Smart Network Switch,如果条件恶劣,可以允许移动数据通过 Wi-Fi 保持连接。对于三星设备,此时您会看到详细状态从CONNECTEDVERIFYING_POOR_LINK

大部分逻辑可以在以下位置找到: http://androidxref.com/4.3_r2.1/xref/frameworks/base/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java

WifiWatchdogStateMachine 监视与 WiFi 网络的连接。当 WiFi 在 L2 层连接时,来自接入点的信标到达设备并且设备可以维持连接,但应用程序连接可能不稳定(由于交换的数据包大小较大)。

现在,我们使用丢包率作为指标来监控 WiFi 最后一跳的质量,以决定链路是否足够好以切换到 Wi-Fi 作为上行链路。

当 WiFi 连接时,WiFi 看门狗会不断对 RSSI 和即时数据包丢失进行采样,并将其记录为每个 AP 的 RSSI 丢失统计数据。当瞬时丢包率高于阈值时,WiFi 看门狗会发送链路不良通知,暂时避免 WiFi 连接。

当 WiFi 被避开时,WiFi 看门狗会继续监视 RSSI 以恢复 WiFi 连接。一旦 RSSI 足够高以实现较低的数据包丢失,就会发送良好的链路检测,以便 WiFi 连接再次可用。

已考虑 BSSID 漫游。当用户在多个 AP 之间移动时,WiFi 看门狗会检测到并持续监视当前连接的 AP。

功率影响应该是最小的,因为大部分测量依赖于驱动程序上已经跟踪的被动统计数据,并且轮询是在屏幕打开且 RSSI 处于特定范围内时完成的。