До api 28 я мог просто запустить фоновую службу и постоянно прослушивать соединение сокета для любых входящих данных. однако в последних изменениях в api 28, как показано здесь https://developer.android.com/about/versions/oreo/background#services Я больше не могу запускать фоновую службу в Android 9, если она не охватывает только один из следующих случаев
Under certain circumstances, a background app is placed on a temporary whitelist for several minutes. While an app is on the whitelist, it can launch services without limitation, and its background services are permitted to run. An app is placed on the whitelist when it handles a task that's visible to the user, such as:
Handling a high-priority Firebase Cloud Messaging (FCM) message.
Receiving a broadcast, such as an SMS/MMS message. Executing a PendingIntent from a notification. Starting a VpnService before the VPN app promotes itself to the foreground.
Единственный вариант, который я нашел, - запустить службу как передний план. Я уже нашел альтернативу, например, с помощью JobScheduler или WorkManger, но я не думаю, что они могут удовлетворить мои требования.
Итак, мой вопрос, есть ли другой способ прослушивать соединение сокета, предназначенное для Android 9 (api 28), кроме использования службы переднего плана?
Вы имеете в виду службу переднего плана?
Хороший вопрос. Я тоже выжил благодаря службе. Служба переднего плана также не лучшее решение для Android 9. Причина в том, что из-за системных ресурсов служба переднего плана также может быть отключена.
Лучше можно использовать WorkManager. Это придаст вам приятный аромат.
Попробуйте.
я не уверен, но я не думаю, что могу использовать workmanager для длительной задачи, такой как фоновая служба
Я использовал службу переднего плана для Android с менеджером работы. Если вас беспокоит отключение службы, проверьте состояние работы службы с помощью диспетчера периодической работы. Как каждые 10 минут или 1 час. Потому что менеджер работы не совместим с логикой работы как сокет, вы можете делать это периодически или вы можете сделать это один раз.
Soo
Socket listen every time
Work manager work by periodicly or one shot
Service works every time;
Конечный результат каждый раз, когда рабочий и когда-либо слушатель идеально подходит для службы push-уведомлений firebase.
for a good working cycle
Service Continuously works and listens with a socket inside.
The work manager checks periodically whether the service is running, in case the service is closed.
что вы имеете в виду, что это лучшая практика? Есть только один вариант, и вы уже знаете, что это такое