Я работаю над этим проектом, где мне нужны обновления местоположения плюс загрузка данных, даже если основное приложение не находится на переднем плане. Я думаю о размещении всех функций местоположения и сети в службе (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 или процесс/устройство в целом?
Re: Thread in Service вместо Main: Хорошее предложение, спасибо. Это, безусловно, облегчит отслеживание потоков. Я предполагаю, что вы имели в виду, что я должен отменить регистрацию приемника onStop (а не onStart). И когда действие запустится, оно может просто запросить у Службы необходимую информацию. Класс Messenger выглядит интересным. Мне нужно сделать немного больше исследований, чтобы понять, подходит ли это моим потребностям. – LiveMynd
Ах да, вот что я имел в виду.Да, класс мессенджеров довольно увлекательный, я использовал его для этого приложения, где постоянно обновлял активность с данными о местоположении из службы. Планируете ли вы использовать новое местоположение apis, например locationServices или locationClient (теперь устарели)? –
На самом деле, мое приложение является частью исследования конфиденциальности в Интернете, поэтому чем меньше сторон участвует в вычислении, тем легче будет анализировать данные. Таким образом, я буду использовать простые библиотеки и классы android.location, поэтому мне не придется влиять на службы Google Play (содержащие службы местоположения) в моем исследовании и из него. – LiveMynd