从异步线程访问Android活动堆栈?

时间:2010-09-26 19:51:21

标签: java android multithreading sockets android-context

StackOverflow上有大量与活动堆栈相关的问题,但我没有看到任何回答我的问题。我正在开发一种在线游戏(现在)有3种不同的活动:

  1. 登录/注册
  2. 菜单(登录时看到,包括“新游戏”,“我的统计数据”以及其他一些内容......我现在只是担心“新游戏”选项。)
  3. 游戏
  4. 套接字连接发生在登录/注册活动中,它创建一个在后台运行的自定义服务。由于数据可以在任何时刻到达,我使用的套接字类具有异步响应处理程序。这意味着无论何时收到消息,我都无法访问当前上下文。

    我需要一种方法来确定当收到各种消息类型时当前上下文是什么,以便我可以相应地处理消息。例如,如果用户到达游戏屏幕(上面的#3)并获得一种消息,它应该简单地告诉游戏屏幕以新游戏状态更新。但是,用户可能处于同一游戏屏幕并收到不同类型的消息,其中显示“关闭屏幕#3和#2并将用户注销,将其返回到屏幕#1”。

    基本上,我正在尝试找出获取当前活动/上下文的最佳方法,确定它是否是当前消息的正确上下文,以及如何处理它。

1 个答案:

答案 0 :(得分:1)

您可以使用有序广播。有服务发出广播。让每个活动注册广播,无论您认为合适的优先级方案。拥有获得广播呼叫abortBroadcast()的活动,以便广播停止。这样,您的服务可以“盲目地”发送事件。

在这种情况下,您甚至可能不需要订购它。我认为活动注册的BroadcastReceiver只会在活动位于前台(未暂停)时才会收到广播。

我对模式in a blog post有了更多的了解,但情况略有不同(要么处理活动中的事件,要么提出Notification)。