Android-теория: разобраться с BroacastReceiver и LocationListener?

Здравствуйте, исколесил просторы интернетовские, материала, решений много, но созрел теоретическо-практический вопрос, надеюсь на помощь сообщества.


Ситуация такова, есть у меня 2 класса.

Первый класс (Activity extends FragmentActivity) содержит гугло-курту, на ней отрисовывается путь по gps-координатам, в нем же «Receiver extends BroacastReceiver».

Второй класс «GPSTracker extends Service implements LocationListener» слушает изменения координат и посылает моему receiver.


Когда первая активити активна — отрисовка идет, все работает. А вот если я выключаю приложение, сервис работает, продолжает собирать координаты и так д… Он их шлет, но я же вышел из приложения и разрегистрировал свой receiver. Когда восстанавливаю карту, то получается что отрисовываю путь с последней сохраненной точки в БД до актуальной.


Вопрос(возможно при написании вопроса ответ назрел сам собой): Каким образом мне сохранять координаты, чтоб потом при восстановлении Активити отрисовать их. Единственно что только-что пришло на ум, так это сохранять координаты прямиком из сервиса в БД а не из Активити. Но не пробовал, не знаю, возможно ли, «хороший тон» ли?


Спасибо.
  • Вопрос задан
  • 4069 просмотров
Пригласить эксперта
Ответы на вопрос 4
ara89
@ara89
держать в бэкграунде сервис с апдейтами координат (особенно GPS), когда ваше приложение не активно, есть плохой тон, т.к. это сильно садит батарею.
Почитайте эту статью, если еще не читали.
Там реализован более хитрый алгоритм получения координат. Он всегда наиболее быстрым и точным способом старается получить последние координаты, при этом минимизируется нагрузка на батарею.
Ответ написан
Комментировать
LeoCcoder
@LeoCcoder
Конечно из сервиса. Сервис ни чем не хуже активити, разница в том, что активити может иметь визуальный интерфейс и активна пока видна. Сервис же не имеет визуально интерфейса и может работать в фоне.

В вашем случае сервис работает и собирает данные, ему вообще всеравно есть активити или нет, он занят своей задачей. Если нужно гдето хранить данные — сохраняйте в базу, в этом нет ничего плохого. Когда создаете активити она биндится к сервису и спрашивает у него данные, которые он накопил и отображает их пользователю. Получив новые данные сервис напоминает активити, что массив с координатами обновился.
Ответ написан
Комментировать
Captcha
@Captcha
Сохранять данные нужно именно из сервиса, а не активити, т.к. она может быть прибита системой в любой момент времени.
В onResume() активити должна спрашивать актуальные данные и отрисовывать их на карте.
Ответ написан
Комментировать
web_dev
@web_dev Автор вопроса
Всем спасибо за ответы.
Не вижу где пометить вопрос как решенный… (
Увы на алгоритм не хватило времени…
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы