Intereting Posts
Связывание или трансляция? Эффекты перехода активности: слайд для верхней активности и масштаба для нижней активности Google play game services – тестирование результатов входа в систему с неизвестной ошибкой Как можно создать горизонтальный список прокрутки с эффектом привязки к центру Нужно ли мне предоставлять изображения с разным размером, если я получаю его с помощью Picasso или Glide или Volley? Проверка нарушений android: minSdkVersion автоматически Используйте тот же фрагмент в ViewPager, но каждый раз фрагмент будет иметь разную компоновку Векторный клипарт Всегда запускайте proguard перед Android dex'ing в Eclipse Есть ли в андроиде прослушиватель по умолчанию (на устройстве) по умолчанию? Java.lang.IncompatibleClassChangeError сбой с эмулятором android 4.4.2 и рутиной ART TabLayout и ViewPager -Tabs не работают после прокрутки между скользящими ящиками AsyncTask onPostExecute никогда не вызывается NoMethodError для стандартного объекта времени выполнения Android В чем разница между `opencv.android.JavaCameraView` и` opencv.android.NativeCameraView`

Что такое START_STICKY, START_NOT_STICKY и START_REDELIVER_INTENT Сервис

Я не могу понять

  1. START_STICKY,
  2. START_NOT_STICKY и
  3. START_REDELIVER_INTENT

Может ли кто-нибудь ясно объяснить примеры.

Я прошел через эту ссылку, но не мог понять ее четко.

заранее спасибо.

Они связаны с услугами. Мы все знаем, что службы продолжают работать в фоновом режиме, и они также потребляют некоторую память для выполнения.

Таким образом, поскольку больше приложений работает на устройстве Android, память устройства продолжает снижаться, и когда наступает время, когда память устройства становится критически низкой, система андроида начинает завершать процессы, чтобы освободить память, занятую процессами ,

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

Простейшим объяснением этого может быть,

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

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

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

Хорошо, я прочитал нить в вашей ссылке, и она говорит все.

Если ваша служба была убита Android из-за низкой памяти, а Android очищает некоторую память, то …

  1. STICKY: … Android перезапустит вашу службу, потому что установлен этот особый флаг.
  2. NOT_STICKY: … Android не будет заботиться о том, чтобы начать снова, потому что флаг сообщает Android, что он не должен беспокоить.
  3. REDELIVER_INTENT: … Android перезапустит службу и повторно onStartCommand() то же самое намерение к onStartCommand() службы, потому что снова флаг.

Оба кода применимы только в том случае, если у телефона заканчивается память, и он убивает службу до того, как она закончит выполнение. START_STICKY сообщает ОС о восстановлении службы после того, как у нее достаточно памяти, и снова вызовите onStartCommand () с нулевым намерением. START_NOT_STICKY сообщает операционной системе, чтобы не возобновлять повторное создание службы. Существует также третий код START_REDELIVER_INTENT, который сообщает ОС о воссоздании службы и повторной доставке того же намерения в onStartCommand ().

Эта статья Дианы Хакборн объяснила это намного лучше, чем официальная документация.

Источник: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html

Ключевой частью здесь является новый код результата, возвращаемый функцией, сообщая системе, что он должен делать с сервисом, если его процесс убит во время его работы:

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

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

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