Android: компонент для фоновой обработки, который должен запускаться вручную - PullRequest
1 голос
/ 02 февраля 2012

Мне нужны твои мысли. Я ищу задачу или службу, работающую в фоновом режиме (без пользовательского интерфейса), способную выполнять следующие действия:

  • он не должен работать постоянно, только когда его вызывают. Есть ровно два возможных абонента:
    1. GUI / Touch приложение. Пользователи могут вводить данные, и приложение передает эти данные в фоновую службу, где данные сохраняются. Это может произойти в любое время, случайным образом
    2. ОС Android, периодически. Может быть, AlarmManager является подходящим подходом. Когда служба вызывается периодически (например, каждые 30 секунд), она должна обработать данные, которые были сохранены на шаге 1. Когда обработка завершена, она должна сама остановиться, чтобы сэкономить батарею.

Другими словами: Пользователь не запускает обработку, пользователь просто отвечает за ввод. Затем AlarmManager периодически запускает обработку.

Подходит ли для этого класс обслуживания Android или есть лучший путь?

Если да, у меня проблема с пониманием класса обслуживания. Согласно документации, он не имеет своего собственного процесса, но работает в хост-процессе. Может ли это привести к проблемам? Поэтому иногда плагин phonegap (который передает данные) - это процесс хоста, а иногда код тревоги - процесс хоста, или я ошибаюсь? Я имею в виду, что у службы нет основного приложения, это скорее нечто независимое, что можно вызвать из разных мест.

Спасибо

Спасибо

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

пожалуйста, учтите, что AlarmManager теряется из всех сигналов тревоги, установленных после перезагрузки телефона. Для повторной инициализации сигналов тревоги обычно создается OnBootReceiver, полученный из BroadcastReceiver, для получения уведомлений о перезагрузке телефона.тогда вам придется снова установить сигнализацию.

2 голосов
/ 02 февраля 2012

Служба была бы уместна здесь.

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

Служба запускается в хост-процессе и будет выполняться в потоке пользовательского интерфейса, если вы не создадите другой поток. Класс IntentService может помочь вам в этом. Это позволяет вам запускать намерения, которые обрабатываются службой в рабочем потоке.

Намерения помещаются в очередь в классе IntentService и обрабатываются поочередно одним рабочим потоком, который управляется IntentService.

В вашем случае вы можете заставить AlarmManager запустить намерение, которое будет обрабатываться вашей службой в рабочем потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...