Как мне спросить Robospice, когда ожидающие запросы будут выполнены?

Я использую Робоспайс. Я хочу написать код многократного использования, чтобы остановить ProgressBars и ProgressDialogs, как только ожидающие сетевые запросы будут очищены для текущей активности. Тем не менее, я столкнулся с парой проблем.

Я наблюдаю, когда запросы завершаются, используя пользовательский SpiceServiceListener для вызова моих пользовательских обратных вызовов, реализованных в каждом действии. Во время onRequestAdded() я показываю любой элемент пользовательского интерфейса Progress. Во время onRequestSucceeded(), onRequestFailed() и onRequestCancelled() я проверяю getSpiceManager().getPendingRequestCount(), чтобы увидеть, достигает ли он нуля, а затем скрываю все элементы пользовательского интерфейса Progress.

Количество ожидающих запросов никогда не достигает нуля в моем приложении (по крайней мере, внутри этих трех методов), но, кажется, останавливается на единице. Это правда, несмотря на то, что я вижу из журнала дооснащения, что все мои запросы кажутся выполненными.

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


person colintheshots    schedule 13.02.2014    source источник


Ответы (1)


У меня есть ответ. Я пропустил инструментарий onRequestProcessed(), поэтому количество ожидающих сетевых запросов никогда не достигало нуля. Счетчик ожидающих запросов теперь достигает нуля.

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

person colintheshots    schedule 14.02.2014
comment
Он является локальным для экземпляра SpiceManager. - person rciovati; 16.02.2014
comment
Спасибо, это полезно. Это означает, что я могу проверять ожидающие запросы только для текущей активности и ее непосредственного контекста. - person colintheshots; 17.02.2014
comment
Быстрое продолжение... Я вижу, что SpiceManager хранит данные запроса как Collections.SynchronizedMap и выполняет вызов size(), чтобы получить количество ожидающих запросов. Однако я ясно вижу, что текущий запрос считается ожидающим выполнения. Два обратных вызова запроса могут вызвать getPendingRequestCount(), пока оба запроса обрабатываются, даже если вызывающая функция синхронизирована. В результате я вижу, что обе функции могут вернуться с двумя ожидающими запросами из-за условий гонки. Есть ли способ окончательно узнать, что SpiceManager выполняется без условий гонки? - person colintheshots; 10.04.2014
comment
Как один инструмент onRequestProcessed? - person Chris Nevill; 10.10.2014
comment
Создайте свой собственный SpiceServiceListener и установите его с помощью getSpiceManager().addSpiceServiceListener(thisVarImplementsSpiceServiceListener); - person colintheshots; 13.10.2014