веб-сокеты на Android и iOS - PullRequest
1 голос
/ 24 июня 2019

Я создаю мобильное приложение с возможностью обмена мгновенными сообщениями. Я придумаю бэкэнд, прежде чем найму кого-то для разработки мобильного компонента. Основной способ связи между мобильным устройством (клиентом) и сервером будет через веб-сокет. Я слышал, что как только приложение перестает быть на переднем плане на мобильных устройствах (как на Android, так и на iOS), веб-сокет закрывается. Я не хочу тратить время на разработку сервера вокруг веб-сокетов, чтобы понять, что я не могу использовать эту технологию для этого вниз по линии. Может ли кто-нибудь помочь мне со следующими вопросами:

  1. Если это так (веб-сокет закрывается на заднем плане), как приложения, такие как шумы, и какое приложение продолжают показывать уведомления в ближайшее время?

  2. Как сокет может продолжать работать в фоновом режиме? Есть ли лучшая новая технология для этого?

UPDATE Вопрос в том, как сохранить постоянную веб-розетку, когда приложения не находятся на переднем плане. Я хотел бы узнать больше о том, как iOS и Android справляются с ситуацией, когда приложение свернуто. Веб-сокеты продолжают работать? или они закрыты? Нужно ли использовать другие библиотеки, чтобы это продолжало работать?

1 Ответ

2 голосов
/ 24 июня 2019

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() из любого места

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...