2016-11-28 7 views
2

Что касается проблемного указанных ниже я пришел к точке, где я должен принять решение о том, чтобы:Обмен данными между различными видами деятельности, Asynctasks и услуг

  • Начало службы один раз, что имеет AlarmManager, внутри которого затем запускает запрос каждые 10 минут. Эта служба будет остановлена ​​только в том случае, если пользователь установит переключатель «Onn-Off» в положение «Off».
  • Используйте AlarmManager для запуска IntentService каждые 10 минут. Эта служба будет запускаться только при необходимости и после этого закрылся

Какой из этих способов лучше, когда речь идет о: - Возможность обмена данными, полученными с помощью службы (или Intenservice) с другими видами деятельности/услуги - Использование аккумулятора - В целом «хорошие привычки кодирования»?

Спасибо!

Оригинал Вопрос:

Я довольно новый Android Developer и столкнулись с ситуацией, что я не знаю, как решить. Я уже несколько дней искал решение, но не смог его найти.

При попытке разработать мою первую идею приложения я начал играть с получением и анализом данных из Интернета. До сих пор я добился создания запроса, который получает данные JSON через API и анализирует этот JSON. Все это делается внутри AsyncTask. Полученные данные затем отображаются на экране.

Однако, для моей идеи приложения, мне нужно, чтобы это было сделано в фоновом режиме. О чем я думал:

  • Запуск службы, которая в значительной степени имеет ту же логику, что и моя Asynctask. Управляемый AlarmManager, эта служба затем запрашивает, получает и анализирует данные за определенный промежуток времени.

Теперь начинается сложная часть: Данные, которые я получаю (допустим, каждые 10 минут), используются для изменения будильника. Итак, в качестве простого примера, допустим, пользователь может установить будильник в 08:00 утра. Затем приложение проверяет текущую температуру каждые 10 минут и изменяет время будильника на 07:45, если температура ниже 0 ° celcius, потому что пользователь должен просыпаться раньше, чтобы очистить лед от его автомобиля. Кроме того, при «пробуждении» приложения в пользовательском интерфейсе должна отображаться текущая (или, скорее, последняя принятая) температура.

Что было бы лучшим способом достичь этого? У меня возникают некоторые проблемы, связанные с передачей/получением данных из AsyncTasks/Services в/из деятельности.

Мой первый подход состоял бы в том, чтобы запустить единую службу из MainActivity, передав некоторые данные Сервису (например, в начальный момент запуска будильника и текущее местоположение пользователя). Затем Служба имеет два отдельных диспетчера AlarmManager. Один из них настроен на выполнение фактического сигнала тревоги (пробуждение пользователя утром), а другой управляет временным интервалом получения данных из Интернета.

Мои вопросы: - Разве мой ход мысли имеет какой-то смысл до сих пор? - Каков наилучший способ передачи и приема данных в/из службы? Мое лучшее предположение заключалось бы в том, чтобы использовать намерения для передачи, и передатчик для приема данных из службы. будет ли это иметь смысл в этой конкретной ситуации?

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

Заранее спасибо

ответ

0

Используйте AlarmManager начать IntentService так часто, как это необходимо (в вашем примере, это должно быть достаточно, чтобы начать проверять температуру около двух часов, прежде чем пользователь планирует встать и, возможно, еще раз после того, как один час и, наконец, за полчаса до обычного времени пробуждения. чаще только в случае экстремальных погодных условий.

это не нужно, чтобы проверить температуру ровно в 03:33 утра, чтобы использовать setInexactRepeating(), это будет легче на аккумулятор

Смотрите также Scheduling Repeating Alarms

Записать результаты SharedPreferences и имеют один IntentService чек за 15 минут до нормального времени пробуждения, если пользователь должен встать прямо тогда. Отмените обычную тревогу пробуждения в этом случае. Общение через SharedPreferences (подумайте о почтовом ящике) и местные (!) Трансляции - хорошая идея - дешево и безопасно :)

 Смежные вопросы

  • Нет связанных вопросов^_^