一个很好的方法是使用结合 AsyncTasks 的服务。
虽然服务在用户不与您的应用程序交互时很有用,但这肯定不是它唯一的用途。服务是任何不需要 UI 的东西的逻辑家园。
在数据驱动的应用程序中,我使用服务作为 API 适配器层。这很好,因为我可以从任何活动中启动它,而不必担心它是否已经实例化,或者我完成后是否需要做任何清理工作。该框架管理服务的生命周期并跟踪客户端。
我认为你的情况类似。只要需要,每个活动都可以使用bindService
和注册更新。unbindService
只要绑定了任何 Activity,服务就会继续做它的事情。onBind
服务可以使用在和中接收到的 Intent 来跟踪哪些活动需要更新onUnbind
,并通过特定的 Intent 向它们发送更新,或者更恰当地说,服务可以触发广播意图,并且活动可以注册他们需要的内容。
在服务中,您将运行 AsyncTasks(可能会在其上运行它们AsyncTask.THREAD_POOL_EXECUTOR
以便获得多个线程)来进行更新。请记住,服务本身是在 UI 线程上启动的。
使用服务的另一个好处是它不需要 Activity 来运行。想到的一个用途是关机后清理。如果您需要在用户退出时发布分数或分析或其他内容,您可以让活动快速关闭并在后台完成更长时间运行的工作。
活动可以使用 向服务请求那些较长的单个任务,并且服务在调用(或)startService
之前不会退出。stopSelf
stopSelfResult
start/stop 和 bind/unbind 的组合确实允许对服务进行干净的管理。它会在需要时且仅在需要时运行,并且您可以将所有 API 访问权限保存在一个地方。
编辑:
好像这不是一个足够坚固的文字墙,我想出了另一个使用服务的好理由。来自进程和线程的开发人员指南:
由于运行服务的进程的排名高于具有后台活动的进程,因此启动长时间运行操作的活动可能会更好地为该操作启动服务,而不是简单地创建工作线程 - 特别是如果操作可能超过活动...