Android запускает службу переднего плана с помощью START_STICKY

Я не мог понять новые функции Android в отношении сервисов. В документации Google после oreo разработчики должны использовать службу переднего плана для запуска службы, когда приложение находится в фоновом режиме.

Я нашел это описание.

«Начиная с Android O, если ваше приложение находится в фоновом режиме (отметьте три условия выше), вашему приложению разрешено создавать и запускать фоновые службы в течение нескольких минут.

По прошествии нескольких минут ваше приложение перейдет в режим ожидания. Когда ваше приложение переходит в стадию бездействия, система останавливает все фоновые службы так же, как ваша служба вызывает Service.stopSelf().'

Я не мог понять, что даже если я запущу службу с START_STICKY, она не запустится снова? Я знаю, что если я начну с START_STICKY , он точно перезапустится после kill. Почему я должен использовать JobScheduler для некоторых нужд (обновления местоположения и т. д.). Может кто-нибудь объяснить это. Я не очень хорошо понимал документы Google.

Я тестирую это сейчас на galaxy note 8 api26 телефоне. Я запустил службу с помощью startService при запуске приложения, и он перезапустился после закрытия приложения. В чем разница между более старыми версиями

Спасибо.


person ahmetvefa53    schedule 25.01.2019    source источник
comment
Основная причина — время автономной работы. В более старых версиях Android разработчики использовали именно эту проблему, чтобы их приложения работали без остановки на устройстве и никогда не отключались, что истощало срок службы батареи устройства. Причина необходимости запуска службы переднего плана заключается в том, что пользователь знает о том, что ваше приложение запущено, и может убить его в любое время, когда захочет.   -  person Pierre    schedule 25.01.2019
comment
Я понял, но что произойдет, если я воспользуюсь startservice из активности? Я видел, что это началось снова после закрытия приложения. Я не видел никаких проблем с программным обеспечением.   -  person ahmetvefa53    schedule 25.01.2019
comment
Если это служба переднего плана, ее можно запускать, как в старые добрые времена. Пока вы находитесь в своей службе, вы вызываете Service.Startforground(new notification..., иначе служба просто остановится снова и, возможно, приведет к сбою приложения. Я думаю, у тебя есть около 5 секунд, чтобы позвонить   -  person Pierre    schedule 25.01.2019
comment
Я запустил службу с помощью startservice при запуске приложения, но ничего не произошло. Если я запускаю его из фона, да, он выдает ошибку.   -  person ahmetvefa53    schedule 25.01.2019
comment
Ну, я хотел бы увидеть весь соответствующий код, чтобы иметь возможность помочь вам. Код службы, раздел, в котором вы запускаете службу и т. д.   -  person Pierre    schedule 25.01.2019
comment
Я добавил это ниже. Я не начал передний план.   -  person ahmetvefa53    schedule 25.01.2019
comment
Я не вижу, чтобы вы добавляли действие при запуске службы, но вызывали intent.getAction() в StartCommand. Попробуйте добавить действие serviceIntent.setAction("some.action");   -  person Pierre    schedule 25.01.2019
comment
Я сделал. Он будет продолжать работать, когда приложение закрыто. он перезагружается   -  person ahmetvefa53    schedule 25.01.2019
comment
При использовании флага START_STICKY служба будет перезапущена в случае перезагрузки телефона??   -  person K Pradeep Kumar Reddy    schedule 27.04.2020