Когда услуга Android будет доступна в течение ее жизненного цикла? - PullRequest
0 голосов
/ 18 ноября 2011

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

У меня проблемы с запросами, которые были сделаны рано / поздно в жизненном цикле Сервиса. Насколько я понимаю, каждый запрос обрабатывается в потоке, отдельном от основного потока службы. У меня следующие проблемы:

  • Запрос обрабатывается Сервисом до или во время Service.onCreate (). Я видел исключения, которые пытаются использовать ресурсы, инициализированные в моем Service.onCreate (), но они имеют значение null, и ведение журнала подтверждает, что основной поток службы находится в onCreate ().
  • Запрос обрабатывается Сервисом во время или после Service.onDestroy (). Опять же, исключения и ведение журнала подтвердили, что поток обрабатывает запрос и пытается использовать ресурсы, которые были освобождены в onDestroy ().

Возможно ли, чтобы Android разрешал отправлять запросы в Службу, которая не полностью инициализирована или уничтожена?

1 Ответ

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

У меня служба Android работает отдельно от клиента

Пожалуйста, не делайте этого, если только эти процессы не представляют отдельные приложения.

Мне интересно, когда именно в течение своего жизненного цикла он принимает запросы от клиента?

«Запрос» - бессмысленный термин.Я предполагаю, что под «запросом» вы подразумеваете «вызов метода, предоставляемого Binder, опубликованным службой».

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

Вызовы, сделанные для методов, предоставляемых Binder, вызываются в потоках из пула потоков, отдельно от основного потока приложения.Это одно из немногих мест в Android, где Android вызывает ваш код из отдельного потока.

Запрос обрабатывается службой до или во время Service.onCreate ().

Это должно быть невозможно, так как onBind() еще не будет вызван, поэтому Binder нет.Ничто не может сделать «запрос».

Запрос обрабатывается службой во время или после Service.onDestroy ()

Я не могу исключить этовозможность.Я бы подумал, что Android сломал бы интерфейс IPC до вызова onDestroy().

, поэтому я хотел бы знать, в какой момент жизненного цикла услуга считается «доступной».".

Это" доступно ", когда клиент ServiceConnection вызывается с onServiceConnected().Это произойдет после onCreate() и onBind(), если служба еще не существовала.

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