2014-02-13 3 views
2

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

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

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

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

ответ

1

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

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

+0

Это локально для экземпляра SpiceManager. – rciovati

+0

Спасибо, это полезно. Это означает, что я могу проверять ожидающие запросы только текущую активность и ее непосредственный контекст. – colintheshots

+0

Быстрое наблюдение ... Я вижу, что SpiceManager хранит данные запроса в виде Collections.SynchronizedMap и выполняет вызов size(), чтобы получить счет ожидающего запроса. Однако я могу ясно видеть, что текущий запрос считается ожидающим. Два обратных вызова запроса могут вызывать getPendingRequestCount(), в то время как оба запроса обрабатываются, даже если синхронизация вызывающей функции. В результате, я вижу, что обе функции могут возвращаться с двумя ожидающими запроса из-за условий гонки. Есть ли способ окончательно узнать, что SpiceManager выполняется без условий гонки? – colintheshots

 Смежные вопросы

  • Нет связанных вопросов^_^