Можно ли остановить службу с помощью android:persistent=true

Я хочу создать системную службу, используя системные разрешения. Сервис должен быть привязан к действию и соответствовать следующим требованиям.

  1. Служба не будет убита системой.
  2. По запросу сервис может быть остановлен.

Чтобы выполнить первое требование, я создал свою службу, используя Context.bindService(), создав связанную системную службу, и добавил android:persistent="true" в манифест службы, информирующий систему о том, что эта служба должна оставаться запущенной все время.

К сожалению, после добавления android:persistent="true" я не могу остановить службу ни с помощью Context.unbindService(), ни с помощью вызова Context.stopService().

Можно ли остановить службу с помощью android:persistent="true" и, если нет, каким должен быть мой подход для выполнения обоих требований


person Shulmant    schedule 28.12.2014    source источник
comment
обратите внимание, что я подписываю службу с помощью системного ключа, позволяющего использовать постоянство при создании системной службы.   -  person Shulmant    schedule 28.12.2014


Ответы (1)


Я только что прошел через нечто подобное. Согласно этому ответу , вам нужно вызвать stopService(), а затем unBindService() -- вызвать оба в указанном порядке. Поместите их в метод onDestroy активности хоста. Кроме того, на всякий случай, если ваш сервис периодически пробуждается с помощью AlarmManager, как это было у меня, обязательно вызовите cancel() и для этого.

Как вы, наверное, знаете, проверить запущенные службы можно в ApplicationManager. Принудительно остановите любые службы, которые могут работать со старым кодом, при тестировании этих изменений.

Что касается флага persistent, я думаю, в соответствии с этим, что это действует только для разработчиков системных приложений. Я думаю, что в обычном приложении Marketplace этот флаг игнорируется.

person JASON G PETERSON    schedule 28.12.2014
comment
Джейсон Я создал свою службу, вызвав Context.bindService(), поэтому вызов Context.unbindService() должен уничтожить процесс, как указано в Документация по Android Если компонент вызывает bindService() для создания службы (а onStartCommand() не вызывается), то служба работает только до тех пор, пока компонент привязан к ней . Как только служба отвязана от всех клиентов, система уничтожает ее. К сожалению, добавление android:persistent=true не позволяет мне остановить службу таким методом. - person Shulmant; 28.12.2014