Мое приложение выполняет вызовы веб-службы из IntentService.Каждый Intent - это, по сути, вызов веб-службы, который должен выполняться.
Как известно, IntentService ставит в очередь Intents;поэтому в любой момент времени будет выполняться только один вызов веб-службы.Это на самом деле желаемое поведение.
Однако это представляет проблему.Предположим, мое приложение ставит в очередь 5 Intents в этом IntentService.Скажем, пользователь оказывается на экране, который, возможно, поддерживает пользовательский интерфейс, пока некоторые данные извлекаются из веб-службы.Если намерение для этого веб-сервиса будет помещено в конец очереди, это может занять много времени, прежде чем веб-сервис будет вызван, удерживая пользователя в течение недопустимого периода времени.
Так как я могу 'Чтобы внедрить Intents в начало очереди IntentService (насколько я знаю), я решил создать второй IntentService для вызовов, которые требуют немедленного выполнения.Так как я хочу, чтобы в каждый момент времени мой сервис срабатывал только на один вызов, я обернул мьютекс вокруг фактического Http-кода.Таким образом, в этом случае Intent будет выполняться сразу (потому что он находится в другом IntentService), но зацикливаться на мьютексе до тех пор, пока какой-либо вызов в другом IntentService не будет завершен.
Это хорошо работает для меня;Я в порядке со всем этим.
Вот мой вопрос:
Теоретически, новый IntentService тоже может стоять в очереди.Из-за рабочего процесса приложения это вряд ли произойдет, но теоретически возможно.Если это так, я бы хотел, чтобы новый IntentService завершил работу, прежде чем исходный IntentService возобновит работу.Моя идея сделать это - заблокировать / разблокировать новый мьютекс в методах создания и уничтожения нового IntentService.Тот же мьютекс также будет заблокирован / разблокирован в начале и в конце метода onHandleIntent старого IntentService.Тем не менее, я обеспокоен тем, какие последствия будут иметь блокировки мьютекса при создании IntentService, задерживая его создание (предположительно, super.create будет вызываться перед блокировкой).Сможет ли Интент все еще стоять в очереди?Есть ли другие подводные камни для этого?