我正在寻找应该在Android应用程序中使用的服务。
文档说明:
服务是一种应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面。
我已经阅读了这篇帖子Application threads vs Service threads,它说同样的服务是用于在后台运行操作的。
但是这也可以使用Thread
完成。 它们之间有什么区别,以及何时应该使用它们?
我正在寻找应该在Android应用程序中使用的服务。
文档说明:
服务是一种应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面。
我已经阅读了这篇帖子Application threads vs Service threads,它说同样的服务是用于在后台运行操作的。
但是这也可以使用Thread
完成。 它们之间有什么区别,以及何时应该使用它们?
根据最新文档更新:
Android在其文档中提到了何时应该使用Service和Thread。以下是文档内容:
如果您需要在主线程外执行工作,但仅在用户与您的应用程序交互时执行,则应创建一个新线程而不是服务。例如,如果您想播放一些音乐,但仅在运行您的活动时,您可以在onCreate()中创建一个线程,在onStart()中开始运行它,然后在onStop()中停止它。还应考虑使用AsyncTask或HandlerThread,而不是传统的Thread类。有关线程的更多信息,请参阅进程和线程文档。
请记住,如果确实使用服务,则默认情况下仍在应用程序的主线程中运行,因此如果服务执行密集或阻塞操作,则仍应在服务内部创建新线程。
这两种方法之间的另一个显着区别是,如果设备休眠,Thread将会休眠。而Service可以在设备进入睡眠模式时执行操作。让我们以使用这两种方法播放音乐为例。
Thread方法:仅当您的应用程序处于活动状态或屏幕显示时,音乐才会播放。
Service方法:即使您最小化应用程序或屏幕关闭,音乐仍可以播放。
注意:从API级别23开始,您应该测试Doze功能。
服务(Service)是指独立于 Activity
运行任务的机制,它允许你在后台运行任何任务。但这会在主 UI 线程上运行,因此当你想进行网络或重负载操作时,就需要使用 Thread
。
例如:如果你想要每天在后台备份即时消息,那么你可以使用Service
。
线程(Thread)
是指在其自己的线程中运行任务而不是在主 UI 线程中运行。当你想进行一些重型网络操作,如持续向服务器发送数据时,就需要使用它,并且与 Android 组件相关联。当启动线程的组件被销毁时,你应该停止线程。
例如:你正在 Activity 中使用 Thread
进行某些操作,当你的 Activity 销毁时最好停止它。
这是我大多数遵循的原则
当操作发生时,如果需要应用程序可见,请使用线程。
当操作发生时,如果应用程序可能不可见,请使用Service。
参考自https://developer.android.com/guide/components/services.html
服务是一种组件,即使用户不与您的应用程序交互,它也可以在后台运行。因此,只有在需要时才应创建服务。
如果您需要在主线程之外执行工作,但仅在用户与您的应用程序交互时执行,则可能应该创建一个新线程,而不是服务。
例如,如果您想播放音乐,但仅在您的活动正在运行时播放,您可以在onCreate()中创建一个线程,在onStart()中开始运行它,然后在onStop()中停止它。
请记住,如果您确实使用了服务,默认情况下它仍在应用程序的主线程中运行,因此如果它执行密集或阻塞操作,则仍应在服务内创建一个新线程。
我解释的方式很简单:
当您在活动中并希望进行一些与主线程频繁通信的后台操作时,请创建线程。 提示- 不要创建太多线程,因为1个线程等于1个处理器线程。如果想使用线程(多个)进行并行处理,请尝试使用Executors。
现在您需要长时间运行的操作并且与UI交互较少,则选择服务。请记住,服务在UI线程上运行。但是,现在您希望处理应在后台线程中完成,然后请使用Intent Service。Intent服务维护其线程池,不会创建新线程,并按顺序运行您的任务。
IntentService
类代表了这两个想法的一种组合。 - Chris Stratton