我正在创建一个具有即时消息传递功能的移动应用程序。在聘请某人开发移动组件之前,我想出了一个后端。移动设备(客户端)和服务器之间进行通信的主要方式是通过网络套接字。我听说一旦应用程序不再在移动设备(包括android和iOS)上出现在前台,Websocket就会关闭,我不想花时间在Websockets上开发服务器以意识到我无法使用这项技术为此目的。有人可以帮助我解决以下问题:
如果是这种情况(Web套接字在后台关闭),bumble之类的应用程序又如何继续显示近期通知?
套接字如何在后台继续运行?有没有更好的更新技术来做到这一点?
更新 这里的问题是,当应用程序不在前台时,如何维护一个持久的websocket。我想了解更多有关在最小化应用程序时iOS和android如何处理情况的信息。 websocket是否继续运行?还是关闭?是否必须使用其他库才能使其继续运行?
答案 0 :(得分:2)
ANDROID:
由于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()