android - wifi关闭并再次打开时Websocket重新连接问题
问题描述
我遇到了 websocket 重新连接的问题。第一次启动应用程序时,创建 websocket 连接没有问题。然后我关闭了wifi,几秒钟后我再次打开了wifi,我的onFailure回调中出现了以下异常。
WS onFailure javax.net.ssl.SSLException: Read error: ssl=0xbf4618c0: I/O error during system call, Software caused connection abort
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
E/Mqtt: WS onFailure java.io.InterruptedIOException: executor rejected
这是我的连接方法:
public fun connect()
{
if(mConnecting)
return
mConnecting = true
val request = Request.Builder().url(mSocketUrl).build()
mWebSocket = mOkHttpClient.newWebSocket(request, this)
mOkHttpClient.dispatcher().executorService().shutdown()
}
这是 websocket onFailure 回调
override fun onFailure(webSocket: WebSocket?, t: Throwable, response: Response?)
{
Log.e(TAG, "WS onFailure $t")
mConnecting = false
reconnect()
}
这是我的重新连接方法
public fun reconnectMqtt()
{
if(mStopping)
return
if(mMqttConnection == null)
{
startMqtt()
return
}
if(!mMqttConnection!!.mConnecting)
{
// mMqttConnection = null
// startMqtt()
Handler(Looper.getMainLooper()).postDelayed({
mMqttConnection!!.connect()
}, 1000)
}
}
我搜索了很多,但没有得到任何帮助。任何帮助将不胜感激。提前致谢!!
解决方案
问题在于连接方法中的以下行。
mOkHttpClient.dispatcher().executorService().shutdown()
关闭方法不允许我重新连接 websocket。这是释放资源所必需的。我将此方法调用转移到服务 onDestroy。
推荐阅读
- javascript - 为什么只有所有其他 HTML 元素对“点击”做出反应?
- php - php文件夹文件创建编码问题
- node.js - webkitRelativePath 在 expressjs 文件上传中不可用
- c# - 查询存储在字符串 Linq 中的 OrderBy 日期
- python - 找出数组中最大的元素是否至少是数组中其他数字的两倍?
- javascript - 使用 Next.js 反应 onClick 事件处理程序不起作用
- javascript - 如何将嵌套的 JSON 对象转换为 URL 查询字符串以通过 AJAX 传递?
- algorithm - 二维圆矩形碰撞和反射不起作用
- string - 字符串上的汇编函数
- php - 根据过滤值显示内容