2010-09-26 43 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)。