0 голосов
 
610 просмотров
7.06.2021 / 21:24  wRadchuk

Андроид. Фоновая работа подобная мессенджерам

Нужно реализовать работу в фоне для оповещения пользователя о новом сообщении с сервера. Важно получать данные не реже раза в минуту. Сейчас используется ForegroundService, так как гугл убил фоновую работу background сервисов введя Doze mode режим с версии Андроид 6.0. В 2018 году гугл порекомендовали использовать Work Manager для управления фоновыми задачами, есть лишь одно маленькое и не приятное ограничение, этот менеджер перезапускается раз в 15 минут. Ну и как известно из проведённых мной опытов, задча запускается и дохнет спустя ~1минуту при свёрнутом приложении или сразу, если приложение было убито пользователем. Если бы мессенджеры его использовали, то выходит сообщения приходили бы как минимум с задержкой в 15 минут, но подобного я не наблюдал в таковых при явном убийстве процесса приложения. Вот собственно и вопрос наклюнулся, как устроена реализация фоновой работы в мессенджерах?

P.S. Бизнес логика приложения вынуждает общаться с сервером не реже раза в минуту.

P.P.S. Молю ведроид разработчиков, объясните пожалуйста куда копать, что из всего вышесказанного не так как я понял и есть ли способ кроме ForegroundService для реализации поставленной задачи?
7.06.2021 / 21:45  aNNiMON
android push notifications?
8.06.2021 / 10:49  wRadchuk
aNNiMON, ты об этом?
  1. private fun getNotify(message: String, importance:Int) {
  2.         val notificationIntent = Intent(this, MainActivity::class.java)
  3.         val pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0)
  4.  
  5.         val notification: Notification = NotificationCompat.Builder(this, Application.CHANNEL_ID)
  6.             .setContentTitle("Заголовок контента")
  7.             .setContentText(message)
8.06.2021 / 10:50  wRadchuk
  1. .setSmallIcon(R.drawable.ic_launcher_foregroun)
  2.             .setContentIntent(pendingIntent)
  3.             .build()
  4.         val mNotificationManager =
  5.             getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  6.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  7.             val channel = NotificationChannel(
  8.                 Application.CHANNEL_ID,
  9.                 Application.CHANNEL_NAME,
  10.                 importance
  11.             )
8.06.2021 / 10:51  wRadchuk
  1. mNotificationManager.createNotificationChannel(channel)
  2. NotificationCompat.Builder(this, Application.CHANNEL_ID)
  3.         }
  4.             startForeground(1, notification)
  5.     }

Это содаёт увидомление в шторке. ForegraundService называется и работает в фоне долго.
Можно ссылку на то о чем ты говоришь?
11.06.2021 / 15:01  aNNiMON
Да, вот https://firebase.google.com/docs/cloud-messaging
Ответы
Ответов нет
Всего: 0

Реклама

Мы в соцсетях

tw tg yt gt