Android和iOS上的websockets

codeday· 2019-10-14
本文来自 codeday ,作者 codeday
我正在创建一个具有即时消息传递功能的移动应用程序.在聘请某人开发移动组件之前,我想出了一个后端.移动设备(客户端)和服务器之间进行通信的主要方式是通过网络套接字.我听说一旦应用程序不再在移动设备(包括android和iOS)上出现在前台,Websocket就会关闭,我不想花时间在Websockets上开发服务器以意识到我无法使用这项技术为此目的.有人可以协助我解决以下问题:

>如果是这种情况(Web套接字在后台关闭),bumble之类的应用程序又如何继续显示近期通知?
>套接字如何继续在后台运行?有没有更好的更新技术来做到这一点?

UPDATE
这里的问题是,当应用程序不在前台时,如何维护一个持久的websocket.我想了解更多有关在最小化应用程序时iOS和android如何处理情况的信息. websocket是否继续运行?还是关闭?是否必须使用其他库才能使其继续运行?

最佳答案
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()