2014-08-28 2 views
0

Я работаю над этим проектом, где мне нужны обновления местоположения плюс загрузка данных, даже если основное приложение не находится на переднем плане. Я думаю о размещении всех функций местоположения и сети в службе (XService, ради аргумента) и обмениваться данными между Activity (Main) и XService, используя широковещательные передачи в рамках одного процесса (без доступа к другим приложениям).LocationManager и Networking in a Service

Я еще не написал код, но поток работы идет что-то вроде:


1. Главное - Start. В onCreate запустите новый поток, и на нем выполните экземпляр и свяжите XService.
2. Главный экран входа. Получите данные, упакуйте его в намерение и передайте в XService.
3. XService - Получать трансляцию, распаковывать намерения. Установочный сокет и потоки данных. Настройка LocationManager для обновлений. Broadcast to Main, чтобы сеть готова. Загружать данные каждый раз, когда обновляется LocationManager.
4. Main - После получения готовности к сети, подготовьте Intent для инициализации и трансляции.
5. XService - Получать запрос инициализации широковещательная рассылка, распаковка, выполнение сетевой задачи, широковещательный ответ.
6. Повторите ad nauseam в соответствии с пользователем взаимодействия и любых временных обновлений.
x. Главная - при выходе из системы транслируется на XService.
x + 1. XService - отправить информацию о выходе на сервер , закрыть розетки, передать в Main, что он выходит из изящно, а затем stopSelf().
x + 2 Main - Полный выход процедура.

Мой главный вопрос - это правильный путь?

Другой вопрос: что происходит, когда XService передает обновление местоположения Main, но Main остановлен (то есть не работает на переднем плане)? Я предполагаю, что поскольку BroadcastReceiver on Main не создается из-за того, что Main находится в остановленном состоянии, трансляция практически ничего не делает. Каким образом это недополученное влияние на трансляцию (или нет, в зависимости от ситуации) XService или процесс/устройство в целом?

ответ

0

Это имеет смысл. Мое предложение запускает сервис по основному потоку, а затем формирует новый поток в классе Service. Это обеспечило бы качественное обслуживание Сервиса, так что вам не нужно создавать поток для его использования, вы можете просто вызвать его.

Если Main остановлен и широковещательная рассылка отправляет сообщение, это потерянное сообщение. Вы хотите избежать этого, зарегистрировав приемник на OnStart и отменив регистрацию на OnStop. Вы можете сохранить любую соответствующую информацию, которую может потребоваться Управлению в самой Сервисе.

Альтернативой широковещательному приемнику является класс Messenger. (http://developer.android.com/reference/android/os/Messenger.html)

+0

Re: Thread in Service вместо Main: Хорошее предложение, спасибо. Это, безусловно, облегчит отслеживание потоков. Я предполагаю, что вы имели в виду, что я должен отменить регистрацию приемника onStop (а не onStart). И когда действие запустится, оно может просто запросить у Службы необходимую информацию. Класс Messenger выглядит интересным. Мне нужно сделать немного больше исследований, чтобы понять, подходит ли это моим потребностям. – LiveMynd

+0

Ах да, вот что я имел в виду.Да, класс мессенджеров довольно увлекательный, я использовал его для этого приложения, где постоянно обновлял активность с данными о местоположении из службы. Планируете ли вы использовать новое местоположение apis, например locationServices или locationClient (теперь устарели)? –

+0

На самом деле, мое приложение является частью исследования конфиденциальности в Интернете, поэтому чем меньше сторон участвует в вычислении, тем легче будет анализировать данные. Таким образом, я буду использовать простые библиотеки и классы android.location, поэтому мне не придется влиять на службы Google Play (содержащие службы местоположения) в моем исследовании и из него. – LiveMynd