【问题标题】:Access Android activity stack from asynchronous thread?从异步线程访问 Android 活动堆栈?
【发布时间】:2010-09-26 19:51:20
【问题描述】:

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

  1. 登录/注册
  2. 菜单(登录时显示,包括“新游戏”、“我的统计信息”和其他一些内容……我现在只是担心“新游戏”选项。)
  3. 游戏

套接字连接发生在登录/注册活动中,它创建了一个在后台运行的自定义服务。由于数据可以在任何时候到达,所以我使用的套接字类具有异步响应处理程序。这意味着在收到消息时,我将无法访问当前上下文。

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

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

【问题讨论】:

  • 这听起来是一种非常糟糕的游戏实现方式。您基本上是依靠服务器来决定一切。您可能应该考虑根据请求/响应重新设计。长时间保持套接字连接打开通常是让您的应用程序失败的好地方。
  • 这就是我想要做的——根据请求/响应进行设计。如果每个用户在比赛中只有 20-30 秒的时间互相移动,我为什么要关闭每个请求之间的连接?

标签: java android multithreading sockets android-context


【解决方案1】:

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

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

我写了更多关于模式in a blog post 的文章,但情况略有不同(在活动中处理事件或引发Notification)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-02
    • 2011-07-15
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2012-07-10
    • 2017-10-02
    相关资源
    最近更新 更多