Расположение менеджер внутри службы - PullRequest
2 голосов
/ 14 марта 2012

Можно ли запрашивать обновления местоположения внутри службы, которая находится в отдельном потоке от того, который вызывает startService?

Я пробовал:

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

Он продолжает давать мнеошибка:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Может ли фоновый менеджер работать внутри службы, находящейся в отдельном потоке, или диспетчер местоположений должен вызываться из действия?

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Вам необязательно получать обновления в главном потоке, но у вас должен быть действительный Looper, который базовая служба может использовать для передачи обратных вызовов через внутренний Handler. По сути, если вы делаете все в главном потоке, то у вас все хорошо, потому что к этому потоку уже подключен активный Looper.

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

Кроме того, имейте в виду, что обновления местоположения изначально асинхронны и не блокируют ваш основной поток только потому, что вы регистрируете там обратные вызовы. Возможно, это не причина, по которой вы заинтересованы в этом, но я подумал, что стоит упомянуть.

НТН

2 голосов
/ 16 декабря 2012

Я обнаружил, что если вы позвоните requestLocationUpdates из службы таким образом:

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLoclistener, Looper.getMainLooper());

Тогда вы получите такое же поведение, как если бы вы вызывали его из действия !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...