Как программно отключить ограничение фонового выполнения Android 8 - PullRequest
0 голосов
/ 02 июля 2018

У меня есть работающее приложение, которое получает уведомления о низком энергопотреблении Bluetooth и отвечает, отправляя данные обратно источнику в асинхронном потоке. Я заметил, что под Android 8 приложение приостанавливается вместе с отправкой данных в фоновом режиме. Можно ли это отключить или мне нужно обновить приложение в качестве службы, и будет ли приложение продолжать получать ответные вызовы Bluetooth, такие как уведомления об изменении характеристик?

Обновление 1. Я не могу получить реальное устройство под управлением Oreo для тестирования фонового сна, поэтому я создал виртуальный Pixel 2 под управлением 8.1 и запустил следующий код в onCreate (). Удивительно, но фоновый поток продолжает работать вовремя даже после открытия приложений для телефона и браузера.

    Thread workThread = new Thread(new Runnable()
    {
        public void run()
        {
            int i = 0;

            try
            {
                while (true)
                {
                    Log.d(LOGTAG, "Work Thread: " + i++);
                    Thread.sleep(500);
                }
            }
            catch (InterruptedException ie)
            {
                Log.d(LOGTAG, "Work Thread interrupted");
            }
            catch(Exception e)
            {
                Log.d(LOGTAG, "Work Thread error: " + e.toString());
            }

            Log.d(LOGTAG, "Work thread stopped");
        }
    });

    workThread.start();

1 Ответ

0 голосов
/ 02 июля 2018

Как вы заметили, это новый Normal для разработчиков Android. Документация Android о фоновых сервисах ставит примечание, что:

Если ваше приложение предназначено для уровня API 26 или выше, система накладывает ограничения на запуск фоновых служб, когда само приложение не находится на переднем плане. В большинстве случаев, как это, ваше приложение должно использовать запланированное задание.

Так что вам нужно будет использовать какой-то вид планирования ваших вещей, когда ваше приложение каким-то образом перейдет в фоновый режим. Рекомендуемый способ - использовать WorkManager , который является частью Google JetPack. Примечание на той же странице дает понять, что:

WorkManager предназначен для задач, требующих гарантии того, что система будет их запускать, даже если приложение закрывается, например, для загрузки данных приложения на сервер. Он не предназначен для фоновой работы в процессе, которую можно безопасно прекратить, если процесс приложения завершится; для подобных ситуаций мы рекомендуем использовать ThreadPools.

Также есть Android Jobs , но автор рекомендует, чтобы его пользователи начали переходить на WorkManager, поэтому нет смысла начинать использовать его с этого момента

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