android - Android 和 iOS 上的 websocket

标签 android ios swift iphone websocket

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

  1. 如果是这种情况(网络套接字在后台关闭),bumble 和 What's app 等应用程序如何继续显示近期通知?

  2. 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/

相关文章:

ios - Parse - 如何在更多数据添加到解析数据库时更新 tableView?

ios - 如何在不拉伸(stretch)的情况下快速裁剪宽图像

ios - Xcode 错误 : PBXCp error: couldn't create directory

Android Mobile Backend Starter 失败并显示 404 未找到...有时

ios - 在 iPhone 6 和 6 plus 中设置背景图像和图标图像

ios - 以纵向状态启动 iPad 应用程序

ios - swifty json解析数组对象

android - Dagger 2 Presenter 注入(inject)返回空值

android - 如何避免滚动时recyclerview晃动?

java - 如何将日期转换成不同的格式