2010-09-26 41 views
0

在StackOverflow上有大量與活動堆棧相關的問題,但我真的沒有看到任何回答了我的問題。我工作的一個在線遊戲,(現在)有3個不同的活動:從異步線程訪問Android活動堆棧?

  1. 登錄/註冊
  2. 菜單(登錄時看到,包括「新遊戲」,「我的統計」,和其他一些東西......我只是擔心,現在的「新遊戲」選項。)
  3. 遊戲

在登錄時連接插座/註冊活動,這將創建一個運行定製服務在背景中。由於數據可以在任何時候到達,我正在使用的套接字類具有異步響應處理程序。這意味着每次收到消息時我都無法訪問當前上下文。

我需要一種方法來找出當收到各種消息類型時的當前上下文,以便我可以相應地處理消息。例如,如果用戶到達了遊戲屏幕(上面的#3)並獲得了一種消息,它應該簡單地告訴遊戲屏幕以新的遊戲狀態更新。但是,用戶可以在相同的遊戲屏幕上並且接收不同類型的消息,該消息稱爲「關閉屏幕#3和#2並且將用戶註銷並返回到屏幕#1」。

基本上,我試圖找出獲取當前活動/上下文的最佳方式,確定它是否是當前消息的正確上下文,以及如何處理它。

+0

這聽起來像是一種非常糟糕的實現遊戲的方式。你基本上依靠服務器來決定一切。您應該考慮根據請求/響應進行重新設計。持久地打開套接字連接通常是使應用程序失敗的好地方。 – Falmarri 2010-09-26 19:54:19

+0

這就是我想要做的 - 根據請求/響應進行設計。爲什麼我想關閉每個請求之間的連接?如果每個用戶在比賽中只有20-30秒的時間互相對抗? – 2010-09-26 20:07:21

回答

1

您可以使用有序廣播。讓服務發送廣播。讓每個活動註冊廣播,無論您認爲合適的優先方案。讓活動獲得廣播電話abortBroadcast(),以便廣播停止。這樣,你的服務就可以「盲目地」發送事件。

在這種情況下,您甚至可能不需要訂購它。我認爲一個活動註冊的BroadcastReceiver只會在活動處於前臺(未暫停)時接收廣播。

我對in a blog post模式有更多的寫法,但是對於稍微不同的情況(處理活動中的事件或者提升Notification)。