Сервис выполняет задачи с интервалом;это должен быть собственный процесс? - PullRequest
0 голосов
/ 22 июля 2011

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

  • Собирает данные пользователя (с разрешения)
  • Запускает определенные задачи каждые X минут и отправляет эти данные на сервер каждые Y минут
  • Я хотел бы, чтобы другие люди могли написать свой собственный интерфейс, виджеты и другие интересные вещи.

В настоящее время служба продолжает работать между запусками задач / сетевыми отправками (без пробуждения).

Служба прослушивает проверки и изменения во время выполнения;это требует отдельного процесса.Есть способы обойти это, но они могут включать использование IPC (что, я думаю, не приведет к значительному снижению производительности).

Вопросы:

  • Если службе разрешат умеретьмежду задачами или я должен позволить ему работать без пробуждения?
  • Эффективнее ли оставаться в живых, чем открывать базу данных каждую минуту или около того?
  • Могут ли люди использовать мой сервис, если его нет вотдельный процесс?

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Возникает вопрос, должен ли мой сервис быть в своем собственном процессе?

Нет.Под этим я подразумеваю, что он должен работать в том же процессе, что и все остальные ваши компоненты.

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

Нет.Это будет автоматически в отдельном процессе от кода от «других людей».

Сейчас служба продолжает работать между запусками задач / сетевыми отправками (хотя и не поддерживает wakelock), как я полагаюбудет более эффективным, чем открытие базы данных / выполнение настройки каждую минуту или около того.

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

Следует ли разрешить гибель между ними или разрешить запуск без пробуждения?

Я рекомендую вам использовать IntentService (так как в любом случае вам нужен фоновый поток для сетевого ввода-вывода) и позволить сервису закрываться между опросами.Кроме того, пожалуйста, позвольте пользователю контролировать значения X и Y из вашего вступительного абзаца.

Задачи выполняются с интервалом, должен ли мой сервис умереть между (необходимость повторно открыть БД)?

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

Могут ли люди использовать мою службу, если она не находится в отдельном процессе?

Да, если вы предоставляете какой-то API (AIDL, задокументированный набор Intents для отправки в виде команд через startService() и т. Д.).

0 голосов
/ 22 июля 2011

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

Пока манифест имеет все возможные Контенты, зарегистрированные с использованием блоков <intent-filter>, с ним может общаться каждый (ваши собственные приложения и любые сторонние приложения).

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

Без полного понимания ваших требований, т. Е. Что именно служба обрабатывает, трудно дать дальнейшие рекомендации.

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