Android:何时使用Service而不是Singleton?

44

我对Android开发还比较新手。

在什么情况下创建一个Android Service比只使用简单的Singleton类更好呢?

以从互联网下载信息源的数据层为例。

对于某些情况来说,使用Service可能太过繁琐了,但有时我可能需要访问Context,因此我对如何设计应用程序感到有些不确定。

1个回答

45

如果在用户离开应用程序活动后,你的进程(及其单例)可以被立即终止,那么使用单例。如果需要它在此之后继续运行一段时间,请使用服务。如果您希望在用户离开应用程序时继续运行,但是可以接受因为用户现在已经转到需要更多内存的其他内容而无法继续运行,则使用单例。

这两个选项之间的决定仅取决于应用程序的生命周期。对于这个目的,服务所做的就是请求平台修改对进程的管理方式。如果单例中需要上下文,只需使用Context.getApplicationContext()检索进程的全局上下文。


5
第一段的最后一句话有点令人困惑。你能稍微改一下措辞吗? - chakrit
我认为这意味着:当您希望进程在用户离开后继续运行,但仅在内存在其他地方不再需要时,请使用单例。 - mparaz
1
所以,就你提到的信息源下载的例子而言,我猜测如果这些信息源在提供它们的互联网服务器上被缓存,那么当用户返回您的应用程序时,您可以赶上进度,或者如果您只关心处理来自信息源的新项目,而不是显示不间断的历史记录,那么您将使用单例模式,但是如果您需要您的应用程序在用户做其他事情时继续监视信息源,那么您将需要一个服务。只是试图让这更真实...有趣的问题。 - Carl
这是一个高质量的回答。每次我再次质疑为什么要使用单例而不是服务时,这篇文章都为每个原因提供了清晰的解释。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接