ネットワーククライアントアプリケーションがあり、デバイスのローテーションと組み合わせてサーバーからの応答を処理するアプローチを検証しようとしています。基本的に、これを行います。
- アクティビティは、ネットワーク応答の受信者を登録します
- アクティビティは、インテントサービスを開始することによってネットワーク操作を開始します
- サービスは、終了したインテントをブロードキャストすることで応答します
私たちの(認識されている)問題は、デバイスを回転させると、アクティビティが破棄/再作成されることです。アクティビティの受信者が登録解除されonPause()
てから再登録されるまでの間onResume()
に、サービスによってブロードキャストされるインテントを見逃した可能性があります。
これは本当の問題ですか?
もしそうなら、私たちは次の解決策を仮定しました、
- まず、アクティビティとサービスの間の通信にインテントを使用しないでください
- 2つのブロッキングキューを作成します。たとえば、アプリケーションクラスのネットワーク要求と応答です。
take()
サービスは、リクエストキューからのスレッドを開始しますtake()
アクティビティは、応答キューからのスレッドを開始しますoffer()
ネットワーク操作を開始するときのリクエストキューへのアクティビティoffer()
ネットワーク操作の結果を送信するときの応答キューへのサービス