Служба Android: очередь событий / задач, инициированных в пользовательском интерфейсе, до запуска службы? - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть ListView, который отображает информацию о некоторых объектах (все одного типа). У каждой сущности есть состояние, и в зависимости от этого ListItem может выглядеть по-разному. Кроме того, нажатие на ListItem выполняет определенную операцию в зависимости от состояния объекта.

В состоянии A объект должен быть передан службе, которая использует его для выполнения какой-либо операции.

Служба должна запускаться только при необходимости. Таким образом, если пользователь нажимает на ListItem, служба будет запущена, и объект должен быть передан ей. Затем служба выполняет некоторую операцию, и состояние объекта изменяется. Это приведет к изменению внешнего вида объекта ListItem, к которому принадлежит объект.

  • Простой случай: служба уже запущена и связана, когда пользователь нажимает на ListItem метод обслуживания, чтобы передать объект может быть вызванным напрямую.
  • Трудный случай: служба не запущена, и пользователь нажимает на ListItem.

Как лучше всего разобраться со вторым делом? Сохранение сущностей в очереди, ожидание запуска службы и прохождение очереди или есть более элегантный способ? Пользователь мог щелкнуть несколько элементов ListItems до запуска службы.

Или лучше, чтобы служба постоянно работала в фоновом режиме, чтобы избежать этого? Тогда возникает вопрос, является ли привязка службы достаточно быстрой, чтобы при щелчке пользователем элемента ListItem ссылка на службу уже была связана.

Большое спасибо!

1 Ответ

0 голосов
/ 10 февраля 2012

Насколько мускулистый Service?Если в фоновом потоке все время ничего не происходит, то я бы сказал, что самый отзывчивый и эффективный способ - сохранить привязку к Service, пока Activity, содержащий ваш ListView, работает.Таким образом, у вас нет «трудного случая».Помните: пока пользователь активно использует ваше приложение на переднем плане, это, очевидно, то, для чего ему нужны ресурсы устройства.

Будьте добропорядочным гражданином, однако, отмените службу на onPause() и повторите привязку на onResume(), чтобы Service можно было быть убитым при необходимости.Я имею в виду, конечно, его можно убить в любом случае в любое время, но это часть того, чтобы быть ответственным гражданином Android.

Не забывайте, что Service сущности по умолчанию выполняют всю их обработкув основной теме.Если ваш Service выполняет тяжелую работу с обработкой onClick(), о которой вы говорите, вы хотите, чтобы он работал в отдельном потоке или даже вставлял другой процесс в манифест.

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