关于ZAKER 融媒体解决方案 合作 加入

Android 和 iOS 上的 websockets

CocoaChina 10-14

我正在创建一个具有即时消息传递功能的移动应用程序 . 在聘请某人开发移动组件之前 , 我想出了一个后端 . 移动设备 ( 客户端 ) 和服务器之间进行通信的主要方式是通过网络套接字 . 我听说一旦应用程序不再在移动设备 ( 包括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 ( )

以上内容由"CocoaChina"上传发布 查看原文

觉得文章不错,微信扫描分享好友

扫码分享