安卓:如何在DHCP续租时防止Wifi断开连接?

3
我们正在开发一个定制的Android平台上的软件,我们开始收到客户关于Wifi连接状态的投诉。似乎偶尔会出现Wifi连接断开1-2秒钟,然后自动恢复的情况。他们可以从小型GUI反馈或从XMPP客户端发出的断开/重新连接事件中注意到这一点。
经过调查,我们从adb logcat日志中发现每次进行DHCP续租时,Wifi都会从CONNECTED状态更改为CONNECTING状态。由于我们当前的DHCP租约时间为1小时,因此我们的平台每29分钟尝试更新其地址。以下是DHCP续订的日志摘录:
[ 11-24 10:10:11.751  2629: 3350 D/DhcpStateMachine ]
DHCP renewal on wlan0

[ 11-24 10:10:12.351  2629: 3350 D/DhcpStateMachine ]
DHCP succeeded on wlan0

[ 11-24 10:10:12.361  2877: 2877 D/DCT      ]
onReceive: action=android.net.wifi.STATE_CHANGE

[ 11-24 10:10:12.361  2877: 2877 D/DCT      ]
NETWORK_STATE_CHANGED_ACTION: mIsWifiConnected=false

[ 11-24 10:10:12.361  2877: 2877 D/DCT      ]
NETWORK_STATE_CHANGED_ACTION: networkInfo=NetworkInfo: type: WIFI[], state: CONNECTING/VERIFYING_POOR_LINK, reason: (unspecified), extra: "XXX", roaming: false, failover: false, isAvailable: true

[ 11-24 10:10:12.371  2877: 2877 D/DCT      ]
onReceive: action=android.net.wifi.STATE_CHANGE

[ 11-24 10:10:12.371  2877: 2877 D/DCT      ]
NETWORK_STATE_CHANGED_ACTION: mIsWifiConnected=false

[ 11-24 10:10:12.371  2877: 2877 D/DCT      ]
NETWORK_STATE_CHANGED_ACTION: networkInfo=NetworkInfo: type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "XXX", roaming: false, failover: false, isAvailable: true

[ 11-24 10:10:12.381  2877: 2877 D/DCT      ]
onReceive: action=android.net.wifi.STATE_CHANGE

[ 11-24 10:10:12.381  2877: 2877 D/DCT      ]
NETWORK_STATE_CHANGED_ACTION: mIsWifiConnected=true

[ 11-24 10:10:12.381  2877: 2877 D/DCT      ]
NETWORK_STATE_CHANGED_ACTION: networkInfo=NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "XXX", roaming: false, failover: false, isAvailable: true

在使用 DHCP 的过程中,我该如何防止连接状态从 CONNECTED 更改为 CONNECTING?我能否更改某个设置以改变此行为?


受影响的设备运行的是哪个版本的Android? - atok
我本来期望的是这个链接:https://www.net.princeton.edu/android/android-stops-renewing-lease-keeps-using-IP-address-11236.html,但它影响了许多更旧的设备。 - atok
可能与问题11236有关吗? - user2693443
@atok,CKD出版:不幸的是,它似乎与这个问题无关。 - slaadvak
1
我认为你无法阻止系统向你发送这些事件,但是你可以通过忽略“连接”来改变你对该事件的反应。 - iagreen
我不明白为什么如果租约时间是1小时,你每29分钟就要续约(这是真正的问题吗?)。此外,与典型值几个小时或几天相比,我认为这是一个非常短的值,并且在租约到期时客户端重新连接网络接口并更改IP地址也没有什么奇怪的地方。 - rupps
1个回答

0

我认为无法真正避免DISCONNECTING。处理此问题的唯一方法是在Wifi状态更改时忽略DISCONNECTING状态,并使用Network中的isConnectedOrConnecting方法而不是isConnected来验证我们是否已连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接