我正在使用Kotlin在Android客户端和服务器之间创建UDP套接字。对于接收消息,我使用了一个协程,代码本身工作正常,检查每个传入的消息。
我现在的目标是设置一个30秒的超时(或类似的东西)来检测通信是否丢失。如果达到了超时,我不希望循环阻塞;我想让它继续接收任何传入的消息。我只想在吐司中记录或显示适当的消息。
val myCoroutineScope = lifecycleScope
if (myCoroutineJob == null || myCoroutineJob?.isCompleted == true) {
// Connection to the server
myCoroutineScope.launch {
withContext(Dispatchers.IO) {
client = Client()
}
// A listener function is created, it is used to handle the data as needed
client?.dataReceivedListeners?.add { data ->
try {
receivedText = decompress(data)
val jsonObject = JSONObject(receivedText.toString())
# RECEIVED MESSAGES HANDLING....
}
} catch (e: JSONException) {
# ERROR HANDLING ........
}
}
}
}
字符串
1条答案
按热度按时间ffscu2ro1#
您可以使用
withTimeoutOrNull
来实现此目的。请注意,它是一个挂起函数。它可以这样使用:字符串
如果超时超过5000ms,则值将为“Hello”或
null
。