|
Использование фоновых потоков (AsyncTask)18.08.2017Для взаимодействия со службой используется активность, но работать со службой может любой компонент приложения, включая другие службы, активности, общие классы и т.п. Также следует отметить, что служба не останавливается самостоятельно — в этом она полагается на активность. Для самостоятельного останова службы доступно несколько методов, в частности, stopSelf() и stopSelfResult(). Класс BackgroundService представляет собой типичный пример службы, используемой компонентами приложения, в котором служба размещена. Другими словами, приложение, выполняющее службу, является также и ее единственным потребителем. Поскольку служба не поддерживает клиентов за пределами этого процесса, она является локальной. И по контрасту с удаленной службой локальная служба возвращает null из метода bind(). Следовательно, единственный способ привязки к этой службе — вызов Context.startService (). К числу критически важных методов локальной службы относятся onCreate(), onStartCommand(), stopXXX() и onDestroy(). Не знаете как провести выходные? Запишитесь на квесты в краснодаре. Вы не только отлично проведете время, но и получите массу положительных эмоций. Есть случай, когда будет существовать только один экземпляр локальной службы с единственным фоновым потоком. В такой ситуации в методе onCreate() класса BackgroundService можно было бы создать поток, выполняющий всю работу службы. Создать и запустить этот поток можно в методе onCreate(), а не в onStartCommand(). Причина в том, что onCreate() вызывается только один раз, и поток должен создаваться однократно за время существования службы. Однако в onCreate() не доступно содержимое намерения, переданного startService(). Если без содержимого намерения не обойтись, можно воспользоваться описанным ранее шаблоном с учетом того, что метод onStartCommand() должен быть вызван только один раз.
|