Каковы лучшие практики для архитектуры приложения Android на основе определения местоположения? - PullRequest
4 голосов
/ 05 июня 2011

Я хочу знать, каковы лучшие практики для архитектуры / рабочего процесса приложения Android на основе местоположения?

Мой текущий код использует несколько Activity и один Backing Service, а также несколько AsyncTask.

Я запускаю свой Сервис, как только запускается мое приложение, я выполняю все HTTP-вызовы и синтаксический анализ в моем Сервисе. И я также написал подкласс AsyncTask для получения местоположения пользователя. Я запускаю AsyncTask каждый раз, когда мне нужно обновить местоположение пользователя. AyncTask вызывает LocationManager.requestLocationUpdates () и запрашивает местоположение как можно быстрее. Моя стратегия для этого:
1. Сначала я получаю значение LastKnownLocation как для GPS, так и для сети, и сравниваю их, используя метод http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate.
2. Когда 3 GPS-местоположения и 5 сетевых местоположений получены, или один или оба из GPS и сети не ответили в течение 1 минуты, я прекращаю задачу.
3. Я возвращаю лучшую оценку, которая у меня есть.

AsyncTask Locating запускается в Сервисе, и я установил AlarmService на 5 минут, чтобы отправить моей службе Намерение, чтобы проверить, нужно ли мне обновить местоположение пользователя. Мой минимальный интервал между двумя AsyncTask составляет 10 минут. Пользователь может запрашивать обновления местоположения вручную, просто нажав кнопку.

Выше описано, как я внедряю сервис Location в свое приложение.
Мне нужно знать, подходит ли моя практика. Если нет, то что не так? Если да, есть ли что-то, что можно улучшить?

Ответы [ 2 ]

4 голосов
/ 05 июня 2011

Это не ответ за слово, но вот некоторые дополнительные моменты. Reto Meier в своих советах по Pro Android в Google IO предложил не использовать Wi-Fi, если батарея разряжена.

Это также можно распространить на местоположение. Сообщите пользователю, что его батарея слишком слабая, и приложение не будет использовать GPS и поставщика услуг сети, вместо этого оно будет использовать последнее известное местоположение, которое может быть неточным.

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

4 голосов
/ 05 июня 2011

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

Я реализовал проверку на "точность" в своем алгоритме.Я предоставляю услугу 1 минуту от начала, чтобы получить ЛУЧШЕЕ возможное местоположение, или я выйду даже раньше, если я получу исправление с точностью 25 м или более.

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

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

Насколько интервал - я даю пользователю варианты 5/15/30/1 час и 1/2 дня.Я использую неточную тревогу для этого - возможно, лучше от батареи.

...