Я пытаюсь создать приложение для чата с использованием XMPP + PHP собственного API и локальной базы данных Android.Я хотел использовать XMPP, работающий в фоновом режиме (в качестве службы или фонового задания), чтобы сообщить моему приложению о получении данных из API, если поступило новое сообщение.Затем сохраните его в локальной базе данных и обновите окно моих сообщений с обновленным содержимым.
Клиент XMPP нормально работает на переднем плане (Lolipop и OREO) Но когда я закрываю приложение (сдвиньте в сторону, а нежесткое уничтожение), оно все еще работает, может быть, 5 минут, затем оно простаивает и через 2 минуты снова включается снова на 5 минут и так далее.(На лолипоп).И он немедленно останавливается на OREO.
Я знаю, что OREO нужен планировщик заданий для управления моей фоновой задачей.Но почему мой сервис останавливается через 5 минут на Lolipop?
Я попытался переопределить метод onDestroy моего Сервиса:
https://stackoverflow.com/a/43936309/10651475
, но он ничего не меняет.
А как мне реализовать мою фоновую работу в OREO?Задание выполняется один раз, и его можно периодически перезапускать, но я хочу, чтобы оно продолжалось, чтобы получать новые сообщения немедленно, даже если я не использую свой телефон в течение 2 часов.
WhatsApp, Facebook Messanger, Snapchatи Instagram делают все это отлично на обеих версиях (Lolipop & OREO).Но как они это делают ???
Я забыл упомянуть, что у всех этих приложений нет ожидающих уведомлений.
Я много читал дискуссии на эту тему.Похоже, они используют Push-уведомления, GoogleCloudMessaging и т. Д. Но я чувствую, что вынужден использовать GCM, Firebase и всю эту экосистему.
Должен ли я понимать, что Google блокирует Android годы за годами?
https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c
https://android.stackexchange.com/questions/140669/how-does-whatsapp-stay-in-background-without-being-closed
https://android.jlelse.eu/keep-those-background-services-working-when-targeting-android-oreo-sdk-26-cbf6cc2bdb7f
Как WhatsApp поддерживает подключение своего сервера eJabberd / XMPP при закрытии приложения?
Я читал эти статьи и многое другое, но я не нашел там своего ответа ...
Если у вас есть идея, это мне очень поможет.
Спасибо:)