Java 什么';应用程序级线程的正确设计方法是什么?

Java 什么';应用程序级线程的正确设计方法是什么?,java,android,Java,Android,我正在Android上开发一款多人在线文字游戏,并希望实现一个线程,用于检查服务器端事件,如下所示: 玩家加入游戏 玩家离开了一场比赛 这名运动员赢了一场比赛 等等 线程将负责监听所有类型的事件,并在用户可见的情况下将事件分派给负责的活动 换句话说,更清楚地说,我有一个事件列表,每个活动都必须注册到这些事件的子集 活动: E1-E2-E3-E4 活动: 活动1对E1和E2感兴趣 活动2对E1、E2和E3感兴趣 活动3对E3和E4感兴趣 我想问的是,实现在后台运行并可以向所有活动分派事件的

我正在Android上开发一款多人在线文字游戏,并希望实现一个线程,用于检查服务器端事件,如下所示:

  • 玩家加入游戏
  • 玩家离开了一场比赛
  • 这名运动员赢了一场比赛
  • 等等
线程将负责监听所有类型的事件,并在用户可见的情况下将事件分派给负责的活动

换句话说,更清楚地说,我有一个事件列表,每个活动都必须注册到这些事件的子集

活动: E1-E2-E3-E4

活动:
  • 活动1对E1和E2感兴趣
  • 活动2对E1、E2和E3感兴趣
  • 活动3对E3和E4感兴趣
我想问的是,实现在后台运行并可以向所有活动分派事件的线程的最佳设计方法是什么

一些想法: -在应用程序级别实现异步任务

-向自定义操作发送广播意图

-服务不是最好的方法,因为它应该创建为在用户不与应用程序交互时在后台运行


您能提出一种最佳实践方法吗?

一种很好的方法是将服务与异步任务结合使用

虽然当用户不与应用程序交互时,服务是有用的,但这肯定不是它的唯一用途。服务是任何不需要UI的东西的逻辑所在地

在数据驱动的应用程序中,我使用服务作为API适配器层。这很好,因为我可以从任何活动启动它,而不用担心它是否已经实例化,或者在完成之后是否需要进行任何清理工作。该框架管理服务的生命周期并跟踪客户端

我认为你的情况与此相似。每个活动都可以使用
bindService
unbindService
注册更新,只要它需要。只要绑定了任何活动,该服务将继续执行其任务。该服务可以使用在
onBind
onUnbind
中接收到的意图跟踪哪些活动需要更新,并通过特定意图向它们发送更新,或者更恰当地说,该服务可以激发广播意图,活动可以注册它们需要的内容

在服务中,您可以运行AsyncTasks(可能在
AsyncTask.THREAD\u POOL\u EXECUTOR
上运行它们,这样您就可以获得多个线程)来进行更新。请记住,服务本身是在UI线程上启动的

使用服务的另一个好处是它不需要运行活动。我想到的一个用途是停机后清理。如果用户退出时需要发布分数、分析或其他信息,可以允许活动快速关闭,并在后台完成较长时间的运行工作

活动可以使用
startService
从服务中请求那些较长的单个任务,并且服务在调用
stopSelf
(或
stopSelfResult
)之前不会退出

启动/停止和绑定/取消绑定的组合确实允许对服务进行干净的管理。它将只在需要时运行,并且您可以将所有API访问保持在一个位置

编辑:

好像这不是一个足够坚固的文本墙,我想出了另一个使用服务的好理由。发件人:

因为运行服务的进程的排名高于进程 对于后台活动,启动长时间运行的活动 操作最好为该操作启动服务,而不是 而不是简单地创建一个工作线程,特别是如果操作 可能会比活动持续时间长


一种很好的方法是将服务与异步任务结合使用

虽然当用户不与应用程序交互时,服务是有用的,但这肯定不是它的唯一用途。服务是任何不需要UI的东西的逻辑所在地

在数据驱动的应用程序中,我使用服务作为API适配器层。这很好,因为我可以从任何活动启动它,而不用担心它是否已经实例化,或者在完成之后是否需要进行任何清理工作。该框架管理服务的生命周期并跟踪客户端

我认为你的情况与此相似。每个活动都可以使用
bindService
unbindService
注册更新,只要它需要。只要绑定了任何活动,该服务将继续执行其任务。该服务可以使用在
onBind
onUnbind
中接收到的意图跟踪哪些活动需要更新,并通过特定意图向它们发送更新,或者更恰当地说,该服务可以激发广播意图,活动可以注册它们需要的内容

在服务中,您可以运行AsyncTasks(可能在
AsyncTask.THREAD\u POOL\u EXECUTOR
上运行它们,这样您就可以获得多个线程)来进行更新。请记住,服务本身是在UI线程上启动的

使用服务的另一个好处是它不需要运行活动。我想到的一个用途是停机后清理。如果用户退出时需要发布分数、分析或其他信息,可以允许活动快速关闭,并在后台完成较长时间的运行工作

活动可以使用
startService
从服务中请求那些较长的单个任务,并且服务在调用
stopSelf
(或
stopSelfResult
)之前不会退出

启动/停止和绑定/取消绑定的组合确实允许对服务进行干净的管理。它将只在需要时运行,并且您可以将所有API访问保持在一个位置

编辑:

好像这不是一场比赛