我正在创建一个具有即时消息功能的移动应用程序。在雇用某人开发移动组件之前,我会先设计后端。移动设备(客户端)和服务器之间通信的主要方式是通过 Websocket。我听说一旦应用程序不再位于移动设备(Android 和 iOS)上的前台,websocket 就会关闭。我不想花时间围绕 websocket 开发服务器来意识到我无法使用这项技术为此目的。有人可以帮我解决以下问题吗:
如果是这种情况(网络套接字在后台关闭),bumble 和 What's app 等应用程序如何继续显示近期通知?
socket如何才能继续在后台运行?有没有更好的新技术来做到这一点?
更新 这里的问题是当应用程序不在前台时如何维护持久的 websocket。我想了解更多有关 iOS 和 Android 如何处理应用程序最小化时的情况。 Websocket 是否继续运行?或者他们关门了?是否必须使用其他库才能使其继续运行?
最佳答案
安卓:
由于Android注重高效使用电池的方式,因此当应用程序处于后台时(依赖),系统会剥夺应用程序的资源。最好使用工作管理器来处理后台任务。
看看https://developer.android.com/topic/libraries/architecture/workmanager/basics.html
示例代码
class GetMessages(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
getAndSaveMessages()
return Result.success()
}
private fun getAndSaveMessages() {
// get messages here
}
}
将此代码放入 Singleton 类中,以便从任何位置(例如 JobManager)访问它
object JobManager{
private fun syncMessages(){
val loadMessages = PeriodicWorkRequestBuilder<GetMessages>(5, TimeUnit.MINUTES)
// Add tag to cancel the thread any time
loadMessages.addTag("MESSAGES")
val myConstraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
// Many other constraints are available, see the
// Constraints.Builder reference
.build()
// Add constraints
loadMessages.setConstraints(myConstraints)
WorkManager.getInstance().enqueue(loadMessages.buld())
}
}
现在您可以从任何地方使用JobManager.syncMessages()
关于android - Android 和 iOS 上的 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56734905/