Где купить билет на поезд12.09.2017Рассмотрим ситуацию, когда служба не перезапускается автоматически. После того, как клиент вызывает метод startService(), служба создается, и метод onStart Command() вызывается, чтобы выполнить свою работу. Если клиент явно вызовет метод stopService(), эта служба не будет автоматически перезапущена. В зависимости от количества все еще подключенных клиентов этот метод stopService() может перевести службу в состояние останова; в этом случае вызывается метод onDestroy() службы и ее жизненный цикл завершается. После того как служба остановлена подобным образом ее последним клиентом, она не будет возвращена. Этот протокол успешно работает, если все происходит, как было задумано, когда методы запуска и остановки вызываются и выполняются последовательно и без пропусков. Узнайте где купить билет на поезд. До выхода версии Android 2.0 устройства сталкивались с множеством простаивающих и занимающих ресурсы служб, даже при отсутствии задач, которые нужно было бы выполнить. То есть среда Android возвращала службы в память даже при отсутствии каких-либо сообщений в очереди. Это происходило бы, когда метод stopService() не был вызван — из-за исключения либо потому, что процесс был прерван между выполнениями onStartCommand() и stopService(). В Android 2.0 было представлено решение, позволяющее указать системе, что при отсутствии ожидающих намерений не следует беспокоиться о перезапуске службы. Это целесообразный подход, поскольку, кто бы ни запустил службу для выполнения задачи, он вызовет ее снова, как делает диспетчер оповещений. Это достигается за счет возврата флага Service.START_NOT_STICKY из onStartCommand(). Однако в действительности, о nonsticky-службе следует помнить один важный момент. Даже если служба помечена как nonsticky, при наличии ожидающих намерений Android оживит службу. Эта настройка применяется только при отсутствии ожидающих намерений.
|
|
|