#android #multithreading #location #google-play-services
#Android #многопоточность #Расположение #google-play-сервисы
Вопрос:
Я использую приведенный ниже код, чтобы получить адрес моей широты / широты
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
Метод getFromLocation блокируется. Я уже выполняю в другом потоке, но я хотел бы отменить операцию.
Итак, как мне отменить getFromLocation ?
Ответ №1:
Ознакомьтесь с документацией Android для отображения адреса местоположения.
Здесь вы создаете IntentService, который запускается в рабочем потоке и завершает работу после onHandleIntent()
завершения. Они используют ResultReceiver, который получает результаты от geocoder.getFromLocation (lat, lng, 1). handler
Переданный в ResultReceiver
конструктор, будет возвращен в основной поток / пользовательский интерфейс.
В этом примере вам вообще не нужно будет отменять операцию. Он выполняется в службе, в рабочем потоке и, следовательно, не блокирует ваш основной / пользовательский поток. Кроме того, служба завершает работу после завершения geocoder.getFromLocation(широта, спг, 1). Если вы больше не хотите получать результаты определения местоположения обратно в основной поток / пользовательский интерфейс, вы также можете легко справиться с этим изнутри ResultReceiver
.