2017-04-13 92 views
-6

我正在使用排球庫來執行網絡操作。在應用程序啓動時,我碰到了服務,我想停止所有的操作,直到我得到服務的響應。如何停止UI線程直到網絡操作完成

所以我想同步執行此操作。因爲我正在使用Volley,默認情況下它在單獨的線程中工作。那麼我該如何做到這一點。

我已經創建了自定義接口/偵聽器來處理這個問題,但Android是否提供了一些方法來實現這一點。

我做了以下。

飛濺活動實現了一個接口,並且數據被加載

@Override 
public void onContainerLoaded() { 
    //startActivity(MainActivity) 
} 

回答

1

後,即使你想,你一定要永遠運行任何與網絡相關的任務同步不言而喻主要活動。

你可以做的是正常地開始你的活動,並用一個進度條標誌代替你的佈局,當你的任務完成時它被設置爲visibility.gone。

編輯:順便說一句,如果你剛開始你的應用程序,但你還沒有做任何具體的事情,我會建議你使用AsyncTask而不是Volley,這往往會導致層耦合錯誤。

1

使用一些事件總線如Otto

創建活動,使您的主要活動訂閱使用事件總線的事件,開始你的操作,顯示「正在加載...」或類似ProgressDialog在主活動。完成時,從您的工作線程向您的主要活動發送事件。讓你的主要活動在收到事件時關閉「加載」對話框,

+0

爲什麼你會建議使用事件總線而不是Android的板載API? – Fildor

+0

綠色機器人或奧托易於使用,並沒有太多的「板載」API的相同(你可以使用本地廣播,但也有一些問題) –

+0

AsyncTask呢?我的感覺是,這足以滿足OP的要求,不是嗎?或者,我已經看到使用Loaders的解決方案。不要誤會我的意思,我不反對你的建議。我只想了解,爲什麼第三方在這裏是必需的。無論如何,如果您已經在應用程序中使用了事件總線,我可以想象這將是更簡單的方法。 – Fildor

1

我想一個更好的問題將是爲什麼你要強制它在主線程?

據我所知,volley不會讓你這樣做,但如果你自己做網絡操作,你也許可以做到。 Honeycomb之後,你將得到一個NetworkOnMainThreadException,所以你將需要覆蓋policies

相關問題