2016-12-08 6 views
1

レガシーコードから継承しました。私が直面している問題は、複数のネットワークコールがAndroidで非同期的にスプラッシュスクリーンで発生していることです(しかし、私の質問ごとに任意のシステムになる可能性があります)。すべての呼び出しが終了したら、別の画面(Androidのアクティビティ)を読み込む必要があります。今、何が起こっているかは、どのコールが最初に終了したかを知る方法がなく、すべてのジョブがいつ終了したかを追跡するためにブーリアンなどがたくさんあります。すべてのジョブが完了したら次の画面に進むために使うことができるパターンやツールについて、あなたのお勧めが必要です。チームはRxJavaを学ぶ時間がありません。これはRxJavaの前にどのようにして行われましたか?複数のネットワークコールがすべて完了した後でイベントをトリガーする方法

私は現在、3つのネットワークコールが同時に開始されていますが、非同期で開始されていることを明確にしています。すべて完了したときにのみ、次のウィンドウに移動します。覚えておいてください、それらはすべて同時に開始しますが、非同期であるため、異なる時間に完了することができます。

私はpromiseのようなものが必要ですが、Javaにはそのようなものはありません。これを行うにはfutureを使用できますか?どうやって?

更新:問題は、この非同期作業を行うアンドロイドの活動にあります。アクティビティは、メインスレッド上でユーザが直面している。

カウントダウンを提案する人には、私はそれに対して考えを持っています。アンドロイドでは、開発者はメインスレッドをブロックする位置にいません。 ANRエラーが表示されます。 2つのネットワークコールスレッドを作成し、メインスレッドから_latch.await();を呼び出してみましょう。アンドロイドは2つの呼び出しが完了するのを待ってから処理を進めます。アンドロイドでのメインスレッドのブロックは、長い間許可されていません。

+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」の場合は、すべての呼び出しが終了したことを意味します。

関連する問題