Путаница в привязке и отвязке службы Android

Я использую Service для выполнения длительного процесса. Я связываю службу в действии, чтобы инициировать процесс. Ниже приведен код, который связывает службу.

val intent = Intent(context,SaveSessionService::class.java)
context.bindService(intent, mSaveSessServiceConnection, AppCompatActivity.BIND_AUTO_CREATE)

После завершения службы в фоновом режиме я пытаюсь остановить службу. Я использую StopService(). Но я получаю сообщение об ошибке подключения к службе с утечкой информации. Прочитав некоторые вопросы SO, мы узнали, что, когда служба связана с BIND_AUTO_CREATE, мы не можем остановить службу с помощью stopService.

Мой вопрос заключается в том, как я могу подключиться к службе, поскольку я также читал, что вызов startService для долго работающей службы также не рекомендуется. Лучше ли использовать IntentService (я так не думаю, поскольку согласно документации для длительной задачи следует использовать только Service)?

Я не могу вернуться к деятельности, как только перейду на сервис. Я должен быть в состоянии остановить службу из самой службы.

Итак, что лучше для этого варианта использования: запустить службу с помощью startService или использовать IntentService?


person User    schedule 11.02.2016    source источник


Ответы (1)


  1. Если вы запустили службу с помощью bindService(), она должна автоматически остановиться после вызова unbindService(), если нет других привязок.

  2. Если вы запускаете службу с помощью startService(), вы должны остановить ее с помощью stopService(), иначе служба может вызвать stopSelf() после того, как это будет сделано. Часто это предпочтительный подход.

  3. Будет ли лучше использовать IntentService, зависит от того, какую функциональность предоставляет служба - в вопросе нет никаких подробностей об этом.

  4. Как упоминалось ранее, вы можете остановить службу из самой службы с помощью stopSelf(), как упоминалось ранее.

person RocketRandom    schedule 12.02.2016