0

StackOverflowにはアクティビティスタックに関連する質問がたくさんありますが、私が持っている質問に答える質問は実際には見つかりませんでした。私は(今のところ)3つの異なる活動があるオンラインゲームに取り組んでいます:

  1. ログイン/登録
  2. メニュー(ログイン時に表示され、「新しいゲーム」、「私の統計」、およびその他のいくつかのものが含まれています...今のところ「新しいゲーム」オプションについて心配しています。)
  3. ゲーム

ソケット接続は、ログイン/登録アクティビティで発生します。これにより、バックグラウンドで実行されるカスタムサービスが作成されます。データはいつでも到着する可能性があるため、私が使用しているソケットクラスには非同期応答ハンドラーがあります。これは、メッセージを受信するたびに現在のコンテキストにアクセスできないことを意味します。

さまざまな種類のメッセージを受信したときの現在のコンテキストを把握して、それに応じてメッセージを処理できるようにする方法が必要です。たとえば、ユーザーがゲーム画面(上記の#3)に到達し、ある種のメッセージを受け取った場合、新しいゲーム状態で更新するようにゲーム画面に指示するだけです。ただし、ユーザーが同じゲーム画面にいて、「画面#3と#2を閉じてユーザーをログアウトし、画面#1に戻す」という別の種類のメッセージを受信する可能性があります。

基本的に、私は現在のアクティビティ/コンテキストを取得するための最良の方法を見つけ出し、それが現在のメッセージに適切なコンテキストであるかどうかを判断し、それを処理する方法を見つけようとしています。

4

1 に答える 1

1

順序付けられたブロードキャストを使用できます。サービスにブロードキャストを送信してもらいます。適切と思われる優先順位スキームを使用して、各アクティビティをブロードキャストに登録します。ブロードキャストコールを取得するアクティビティを実行しabortBroadcast()て、ブロードキャストを停止します。そうすれば、サービスは「盲目的に」イベントを送信できます。

この場合、注文する必要さえないかもしれません。BroadcastReceiverアクティビティによって登録されたものは、アクティビティがフォアグラウンドにある(一時停止されていない)場合にのみブロードキャストを受信すると思います。

少し異なる状況(アクティビティのイベントを処理するか、を発生させる)の場合でも、ブログ投稿でパターンについてもう少し書いていNotificationます。

于 2010-09-26T21:33:11.783 に答える