2014-02-13 53 views
2

我正在使用Robospice。我想編寫一些可重用的代碼,以便在當前活動的待處理網絡請求清除後立即停止ProgressBars和ProgressDialog。但是,我遇到了一些問題。待處理的請求完成後,我該如何詢問Robospice?

我正在監視什麼時候請求已完成,通過檢查自定義SpiceServiceListener來調用在每個活動中實現的自定義回調。在onRequestAdded()期間,我顯示了任何Progress UI元素。在onRequestSucceeded(),onRequestFailed()和onRequestCancelled()期間,我檢查getSpiceManager()。getPendingRequestCount()以查看它是否爲零,然後隱藏任何Progress UI元素。

在我的應用程序中掛起的請求計數永遠不會達到零(至少在這三個方法中),但似乎停止在一個。即使我可以從Retrofit日誌中看到我的請求看起來都已完成,情況也是如此。

待處理請求計數是全局還是特定於當前活動及其spice管理器實例?是否有更好的方法來觀察當前活動中完成的所有請求?

回答

1

我有一個答案。我錯過了儀表onRequestProcessed(),所以掛起網絡請求的數量從未達到零。掛起的請求計數現在確實達到零。

我仍然不知道計數是全局還是本地的當前活動及其SpiceManager實例,但我從我的新代碼中獲得有用的結果。

+0

它是SpiceManager實例的本地實例。 – rciovati

+0

謝謝,這很有用。這意味着我可以只檢查當前活動及其直接上下文的待處理請求。 – colintheshots

+0

快速跟進......我可以看到SpiceManager將請求數據存儲爲Collections.SynchronizedMap,並執行size()調用以獲取掛起請求計數。但是,我可以清楚地看到當前的請求被計爲待處理。即使調用函數已同步,兩個請求回調也可能在兩個請求正在處理時調用getPendingRequestCount()。因此,由於競爭條件,我發現這兩個函數可能會返回兩個未決請求。有什麼方法可以明確知道SpiceManager在沒有競爭條件的情況下完成? – colintheshots