2016-12-08 44 views
1

我從遺留代碼繼承。我面臨的問題是在Android中異步出現多個網絡調用(但可以是我的問題的任何系統)。所有的調用完成後,我需要加載另一個屏幕(在Android中的活動)。現在,發生的事情是無法知道哪個調用先完成,並且有很多布爾等,用於跟蹤所有作業何時完成。我需要您推薦我可以使用的模式或工具,以便在所有作業完成後才轉到下一個屏幕。該團隊沒有時間學習RxJava。這在RxJava之前是如何完成的?如何在多個網絡呼叫全部完成後觸發事件

所以要清楚我現在有3個網絡調用是同時發起的,但是是異步的,我只想在下一個窗口完成時才進入下一個窗口。請記住,它們都是在同一時間開始的,但可以在不同的時間完成,因爲它們是異步的。

我需要類似於promise,但我認爲Java沒有。我可以使用future來做到這一點嗎?怎麼樣?

更新:問題是我在做這個異步工作的android活動。活動在主線程中面向用戶。

對於那些建議countdownlatch我有一個反對它的想法。在android中,開發人員無法讓主線程阻塞。 ANR錯誤將會出現。所以可以說我做了兩個網絡調用線程,然後從主線程調用_latch.await();。現在android會繼續等待這兩個調用完成。長時間不允許在android主線程中阻塞。

+1

你不想使用信號量或倒數計時器的原因? https://developer.android.com/reference/java/util/concurrent/package-summary.html –

回答

0

如果您知道您想要在開始時啓動多少個總調用,那麼@Karlo推薦的countDownLatch應該可以工作。但是,如果在其他呼叫已經運行時可以創建新呼叫,則嘗試信號量。 https://developer.android.com/reference/java/util/concurrent/Semaphore.html

基本上,您創建'n'信號量池,並且在開始呼叫時調用acquire(),在結束呼叫時調用release()。

剛剛發佈後,檢查availablePermits()。如果結果爲'n',則意味着所有呼叫都已結束。

相關問題