Вам необязательно получать обновления в главном потоке, но у вас должен быть действительный Looper
, который базовая служба может использовать для передачи обратных вызовов через внутренний Handler
. По сути, если вы делаете все в главном потоке, то у вас все хорошо, потому что к этому потоку уже подключен активный Looper
.
Посмотрите документы для Looper
, так как они объясняют, как настроить фоновый поток с допустимым экземпляром, чтобы его можно было использовать для этой цели. Существует также версия requestLocationUpdates()
, которая принимает объект Looper
. Вы можете вызвать requestLocationUpdates()
при передаче результата Looper.getMainLooper()
, чтобы разрешить обработку обратных вызовов в главном потоке, даже если вы не сможете подключить прослушиватель непосредственно из этого потока.
Кроме того, имейте в виду, что обновления местоположения изначально асинхронны и не блокируют ваш основной поток только потому, что вы регистрируете там обратные вызовы. Возможно, это не причина, по которой вы заинтересованы в этом, но я подумал, что стоит упомянуть.
НТН