android - Android 应用程序生成线程与服务之间的区别?

标签 android

我有一个 Android 应用程序需要在后台和单独的线程上执行工作。对于我的第一个概念验证,我对 Application 类进行了子类化,并在 onCreate() 内部生成了一个执行后台工作的线程。这很好用。但是,我刚刚意识到,过去我曾在这种情况下使用过服务。

问题是,是否有理由在从服务生成的线程上而不是在 Application.onCreate() 生成的线程上工作? Service 应该执行独立于 Activity 并且可以在没有 Activity 可见时运行的“后台”工作(它使用 UI 线程,除非使用线程,我知道)。使用基于应用程序的线程似乎也能完成这一切。通过不使用服务,它实际上消除了复杂性,因为 Activity 只是访问应用程序单例。据我所知,我不需要绑定(bind)到该服务。

我是否会遇到使用服务会阻止的生命周期极端情况?这是我对这种方法唯一关心的问题,但除此之外,我不会相信服务的好处。

最佳答案

不同之处在于,如果您希望线程仅在 Activity 运行时在后台运行,或者您希望它在用户离开时继续运行。

即使 Activity 不再可用,服务也能够在后台运行。当您的应用程序在不久的将来应该在没有任何用户参与的情况下继续工作时,将使用它们。如果您在 Service 中运行 Thread,即使用户离开应用程序,该线程也会继续运行。有时这可能是有益的,因为用户可能希望您继续下载非常大的文件,但不希望应用程序继续在前台运行。然后,几小时(几天、几个月、几年)后,用户可以重新进入应用程序来阅读文件。

但是,如果您正在使用需要根据结果不断更新 UI 的线程,则在 Activity 中启动它可能更有益,因为它没有在服务中运行的真正目的。如果线程在 Activity 中而不是在服务中,它在程序中也可能更容易与 UI 对话。 (可能会有一些性能优势,因为 Android 不必处理其列表中的另一个服务,但这纯粹是我的猜测。我没有证据。)

注意:即使 Activity 退出,在 Activity 中创建的线程仍将继续运行。然而,这仅仅是因为该应用程序仍在内存中。当 Activity 不再在 View 中时,Activity 及其线程比服务线程具有更高的从内存中删除的优先级。

关于android - Android 应用程序生成线程与服务之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935151/

相关文章:

android - 广播接收器中的Android音频管理器

android - AlarmManager - 如何在每个小时的顶部重复一个警报?

android - 以非常快速的方式在android中逐像素绘制图像

Android launchMode singleTask

android - 后退按钮不会从主页关闭应用程序

android - 方形 Dagger IllegalStateException : Module adapter for class MyApplicationModule could not be loaded

java - 将值添加到 recyclerView 的部分中

android - 用于 ASR 目的的 2 麦克风 Android 手机?

android - 谷歌账号获取Token

android - 从 fragment 动态获取 ImageView 中的图像总是返回 0 作为 resourceid