Зачем использовать Сервис вместо 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() уже вызывается в фоновом потоке.

Другие вопросы по тегам