Зачем использовать Сервис вместо IntentService?
Почему SyncService
Пример, предоставленный Google ниже, использует Service
вместо IntentService
? Насколько я понимаю, что IntentServices
бегать в фоновом режиме, а обычный Service
будет работать в главном потоке. Для чего-то без пользовательского интерфейса, который просто обновляет данные, зачем вам запускать его в главном потоке? Разве это не рискует фреймами?
http://developer.android.com/training/sync-adapters/creating-sync-adapter.html
Возможно ли иметь автономный IntentService
? или это должно быть основано на чем-то, работающем в основном потоке? Это единственная причина, по которой я понимаю, почему мы бы Service
выше.
1 ответ
Насколько я понимаю, IntentServices работают в фоновом режиме, в то время как обычная служба запускается в основном потоке.
Объекты не работают на потоках. Методы делают.
IntentService
наследуется от Service
, Основные методы жизненного цикла на Service
, а именно onStartCommand()
Вызываются в главном потоке приложений. IntentService
случается, чтобы обеспечить фоновый поток, который он использует для вызова вашего onHandleIntent()
метод, вызванный вызовом onStartCommand()
,
Для чего-то без пользовательского интерфейса, который просто обновляет данные, зачем вам запускать его в главном потоке?
Вы не
Почему пример SyncService, предоставленный Google ниже, использует Сервис вместо IntentService?
Потому что IntentService
здесь неуместно Цитирование документации, на которую вы ссылались:
Для этого вам нужно создать связанную Службу, которая передает специальный объект связывания Android из компонента адаптера синхронизации в платформу. С помощью этого связующего объекта платформа может вызывать метод onPerformSync() и передавать ему данные.
IntentService
и шаблон привязки не работают хорошо вместе.
С точки зрения многопоточности, onPerformSync()
вызывается в фоновом потоке, предоставляемом Android. Следовательно, даже если IntentService
не были исключены на основе привязки, вам не нужен другой фоновый поток, так как onPerformSync()
уже вызывается в фоновом потоке.