【问题标题】:websockets on Android and iOSAndroid 和 iOS 上的 websocket
【发布时间】:2019-11-06 03:53:43
【问题描述】:

我正在创建一个具有即时消息功能的移动应用。在雇用某人开发移动组件之前,我将提出后端。移动设备(客户端)和服务器之间通信的主要方式是通过 websocket。我听说一旦应用程序不再在移动设备(android 和 iOS)上的前台,websocket 就会关闭。我不想花时间围绕 websockets 开发服务器来实现我不能使用这项技术为此目的。有人可以帮助我解决以下问题:

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

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

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

【问题讨论】:

标签: android ios swift iphone websocket


【解决方案1】:

安卓:

由于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()

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2011-07-31
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2017-07-31
    • 2015-03-21
    • 1970-01-01
    • 2015-03-31
    相关资源
    最近更新 更多