Часто запускайте службу после закрытия приложения - PullRequest
1 голос
/ 01 октября 2019

Для моего приложения я хочу получить данные с сервера в фоновом режиме. Когда пользователь хочет получать уведомления о конкретных изменениях, я хочу, чтобы мое приложение продолжало получать данные, даже когда приложение было закрыто. Я исследовал эту тему и обнаружил, что возможности запуска служб непрерывно, даже после закрытия приложения, изменились с Android Oreo. Чего я не вижу, так это альтернативы работе запущенных сервисов в фоновом режиме с более новыми версиями Android. Наиболее предлагаемое решение, которое я видел, - это использование Foreground Service. Но поскольку у меня нет взаимодействия с пользователем, я не думаю, что это решение идеально подходит. Также я читал о WorkManager, но, к сожалению, минимальный интервал времени составляет 15 минут. Существуют ли другие альтернативы непрерывной обработки данных в фоновом режиме, чем служба Foreground и WorkManager?

1 Ответ

1 голос
/ 01 октября 2019

Вам не нужно «взаимодействие с пользователем», чтобы иметь службу Foreground, вам нужно уведомление, которое нельзя удалить, пока служба находится на переднем плане.

Если ваш контекст уведомления - это сама служба, нажатие на уведомление приведет пользователя к «настройкам», где он / она может принудительно закрыть службу, например).

Вы можете запустить службу FG в BOOT_COMPLETED приемнике вещания. Вы должны быстро (5 секунд или меньше) отправить его на передний план или андроид выдаст исключение. К сожалению, есть ошибка , которую Google считает, что все в порядке и закрыто, поскольку "не исправит", но вам все равно придется обойтись.

Короче говоря, есть onCreate в вашем сервисе:


    @Override
    public void onCreate() {
        super.onCreate();

        final Notification notification = createNotification();
        startForeground("SOME_UNIQUE_ID", notification);
    }

Вы понимаете (createNotification() - это то, что вы хотите создать канал (если O +) + Уведомление.

ОДНАКО, все это хорошо, но служба будет работать постоянно, что, вероятно, не то, что вам следует делать.

Вы можете использовать Alarm более эффективный триггер (с точки зрения области действия) Intent Service, чтобы выполнить работу, запланировать еще один сигнал тревоги, скажем, 5 минут, и сделать это снова.

Или - как прокомментировано - вы можете использовать Firebase и Уведомления, чтобы реагировать на изменения.

В общем, это варианты.

Я бы сказал, что если вам действительно не нужно обновление в режиме реального времени, 15 ~ WorkManager обычно в порядке, если вы можете справиться стот факт, что вы должны разработать свой код, чтобы он был очень независимым, потому что WorkManager не может получить много информации, и это неудобно для некоторых вещей ...

...