Android和iOS上的网络套接字

时间:2019-06-24 10:43:47

标签: android ios swift iphone websocket

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

  1. 如果是这种情况(Web套接字在后台关闭),bumble之类的应用程序又如何继续显示近期通知?

  2. 套接字如何在后台继续运行?有没有更好的更新技术来做到这一点?

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

1 个答案:

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