Как использовать пакет местоположения Android в сервисе, отдельном от потока пользовательского интерфейса? - PullRequest
1 голос
/ 14 ноября 2011

У меня есть небольшое приложение для Android, над которым я работаю, которое записывает данные GPS на мою SD-карту в файле GPX. В настоящее время у меня есть основной вид деятельности, который запускает службу для выполнения всей фоновой работы. Служба находится на переднем плане в панели уведомлений, чтобы сделать ее менее вероятной для операционной системы. В настоящее время я запрашиваю обновления местоположения у службы на максимальной частоте, чтобы получить наиболее точный маршрут. Проблема в том, что мой пользовательский интерфейс работает медленно / странно. Поправьте меня, если я ошибаюсь, но я пришел к выводу, что у меня слишком много всего происходит в основной ветке приложения. Моя следующая мысль - попытаться переместить сервис, выполняющий сбор и регистрацию данных, в отдельный поток. Я новичок в Java / Android, поэтому мне сложно обдумать всю тему взаимодействия с отдельными потоками. Первоначально в ходе исследования я наткнулся на IntentServices, которые должны облегчить работу с потоками, но из того, что я прочитал, они не очень хорошо сочетаются с пакетом определения местоположения Android, поскольку они не работают достаточно долго. Я чувствую, что бегаю кругами с интернет-поисками на эту тему. Мне крайне необходимы некоторые рекомендации о том, как реализовать следующие функции для службы моих программ:

  1. Отдельная нить от основной нити
  2. Выборка и хранение данных должны быть наименее вероятными, чтобы быть уничтоженными ОС и запускаться на неопределенный срок после запуска (не беспокойтесь о батарее, устройство будет подключено к источнику питания во время работы приложения)
  3. В конце концов мне понадобится возможность взаимодействия с пользовательским интерфейсом

Спасибо за любую помощь, которую вы можете предложить!

1 Ответ

1 голос
/ 14 ноября 2011

это распространенная проблема, которую я много выполнил на

в панели запуска или main () (то, что Android называет Activity), которую вы делаете как можно меньше (что означает сохранение ссылок).они дают вам и, возможно, устанавливают несколько других вещей, пока вы там находитесь) и не переходите к длительной деятельности

Служба - это именно то, что вам нужно, но вместо того, чтобы пытаться ее прокачатьв состояние «держись», что ты делаешь, это реализует проверки на пустые значения и обрабатывает их по мере необходимости - попытка «починить» машину, чтобы она работала так, как ты хочешь, на самом деле влечет за собой отмену удержания в основном потоке и отпусканиевсе идет так же быстро, как и в соответствии с общими ограничениями Applicaton.

Чтобы сделать это, вы можете просто написать Сервис - читая все доступное - затем расширить этот сервис и реализовать Runnable, затем запустить конструктор для этого кода из ActivityСоздайте и создайте новый Thead (yourClass) .start ();в проверке onCreate () для Thread.isRunning () перед его повторным запуском ...

Сервис будет где-то вызывать onCompletion () - он будет проходить через интерфейс

Всеэто делается в Android как что-то вроде начала действия для результата, затем вы просто обращаетесь к пользовательскому интерфейсу в этом вызове или, как-то, выясняете, как GUI может быть вызван каким-то образом в какое-то время, затем проверяете, выполняется ли Service, так что отчет вграфический интерфейс

...