Подтвердить что ты не робот

Разница между START_STICKY и START_REDELIVER_INTENT?

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

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

Я прав? или есть что-то, чего я не знаю?

Также моя служба навсегда перезапускается после ее уничтожения системой.

enter image description here

4b9b3361

Ответ 1

START_STICKY -. Он сообщит системе о создании новой копии службы, когда доступной памяти будет достаточно, после сохранения состояния и восстановления из нижней памяти. В этом процессе мы потеряем результаты, которые могли быть рассчитаны ранее.

START_REDELIVER_INTENT -. Он сообщит, что система перезагрузится и восстановит сервис после сбоя, а также повторно добавит намерения, которые присутствовали во время сбоя.

Кроме того, мы можем также немного отметить о START_NOT_STICKY

START_NOT_STICKY -. Это скажет системе, чтобы она не беспокоилась и не беспокоилась о перезагрузке службы, даже если она имеет достаточную доступную память.

пожалуйста, посетите более

http://developer.android.com/reference/android/app/Service.html

Ответ 2

  • START_STICKY в основном совпадает с предыдущим поведением, когда служба остается "запущена" и позже будет перезапущена системой. Единственное отличие от предыдущих версий платформы заключается в том, что если она будет перезапущена, поскольку ее процесс будет убит, onStartCommand() будет вызываться в следующем экземпляре службы с нулевым Intent вместо того, чтобы вообще не вызываться. Службы, которые используют этот режим, должны всегда проверять этот случай и обрабатывать его соответствующим образом.

  • START_NOT_STICKY говорит, что после возвращения из onStartCreated(), если процесс был убит без оставшихся команд запуска для доставки, тогда служба будет остановлена ​​вместо перезапуска. Это имеет гораздо больший смысл для служб, которые предназначены для запуска только при выполнении команд, отправленных им. Например, услуга может запускаться каждые 15 минут после тревоги для опроса какого-либо состояния сети. Если он будет убит при выполнении этой работы, было бы лучше просто остановить его и начать работу в следующий раз, когда срабатывает будильник.

  • START_REDELIVER_INTENT похож на START_NOT_STICKY, за исключением случаев, когда сервисный процесс убит до того, как он вызывает stopSelf() для данного намерения, это намерение будет повторно отправлено на него до его завершения (если только после некоторого количества других попыток он все равно не может завершиться, после чего система откажется). Это полезно для служб, которые получают команды работы, и хотят, чтобы они в конечном итоге завершили работу для каждой отправленной команды.

Пожалуйста, посетите: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html

Ответ 3

Если вы переопределяете метод onstartCommand(), ваша ответственность - остановить его, когда это не нужно, путем вызова команды stopSelf() или stopService().