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