Я ищу "правильный" способ исправить положение пользователя как одноразовую задачу.На данный момент мой поток выполнения примерно равен:
- Пользователь нажимает кнопку.
- Обработчик (содержится в основном коде Activity ) регистрирует GPSслушатель местоположения с системой, настроенной на максимально быстрое обновление, запускает ASyncTask и завершает работу.
- Перед выполнением, ASyncTask эффективно генерирует ProgressDialogблокирование любого другого использования пользовательского интерфейса.
- Для выполнения фоновой задачи ASyncTask ожидает либо тайм-аут, либо определение местоположения для GPS.
- После выполнения ASyncTask либо отображает некоторые релевантные данные пользователю, если местоположение было найдено, либо отображает ошибку в тосте, если это не так.Это также отменяет регистрацию слушателя, конечно.
Теперь, пока это работает, есть множество минусов.Во-первых, и совершенно очевидно, что все другие взаимодействия пользовательского интерфейса с приложением блокируются во время выполнения запроса.В настоящее время это не так уж и плохо, так как основная функция приложения состоит в том, чтобы выполнять эту задачу, и во время работы делать больше нечего - это также не дает пользователю спамить кнопку.Кроме того, я не уверен, является ли фаза пост-выполнения ASyncTask действительно местом для размещения моей логики определения местоположения (она делает интернет-вызов, что само по себе может быть лучше в ASyncTask?).Тем не менее, я не уверен, как еще передать тот факт, что местоположение было найдено и что основной поток должен что-то сделать.
Я надеялся, что кто-то может сообщить мне о «правильном» путичтобы сделать это - то есть использует ASyncTask, как это правильно, должна ли быть задействована Служба, и как я должен иметь дело с пост-местоположением интернет-вызова), и, возможно, даже дать несколько мудрых слов о том, как в целом действоватьс потоком управления приложения, которое должно делать несколько «блокирующих» вызовов.
Я могу предоставить код при необходимости, может потребоваться немного времени, чтобы сократить его до минимального решения.