我们在日常生活中都会遇到各种后台运行的移动应用程序。此外,在许多应用程序中,此类任务是在不使用用户界面的情况下完成的,即任务是在上下文中完成的。例如,我们移动设备的音乐应用程序或任何其他音乐应用程序在后台运行,使您可以在使用音乐应用程序时使用任何其他应用程序。因此,使用 Service 或 IntentService 来强制执行此功能。
服务
您可能会将 Service 视为一个 Android 组件,用于在后台运行长时间运行的操作,例如在音乐应用中,我们在使用其他移动应用的同时在后台运行该应用。最好的事情是您不必为后台操作提供任何用户界面。您还可以使用 Service运行一些进程间通信 (IPC)。由于任何应用程序组件都可以启动一个 Service 并在后台运行,因此您可以借助 Service 执行多项操作。使用该服务的三种方式是:
- Foreground :前台服务是一种通知消费者后台正在发生的事情的服务。例如,在音乐应用程序中,用户将在计算机上看到最新歌曲作为通知。因此,在这种情况下必须显示消息。
- 背景:在这种情况下,消费者永远不会知道应用程序上下文中发生了什么。例如,当通过 WhatsApp 发送图像时,WhatsApp 会压缩图像文件以使其更小。此任务在后台执行,消费者不知道发生了什么。但是,Android 系统在使用 API 级别 21 或更高级别的后台服务时会施加某些限制。因此,在您使用后台服务之前,请确保您了解这些限制。
- Bound :当一个或多个应用程序组件使用 bindService() 方法绑定 Service 时,使用 Bound Service。如果应用程序取消绑定服务,服务将被破坏。
意向服务
IntentService 基类是 Operation。本质上,它采用了“作业队列操作”,其中 IntentService 管理客户端的按需请求(表示为 Intent)。因此,每当客户端发送请求时,服务就会启动,并在每个目的被解决后停止。客户端可以使用 Context.startService(intent) 来提交启动服务(Intent)的请求。这里生成了一个工作线程,所有请求都由工作线程处理,但一次只处理一个请求。要使用 IntentService,您必须扩展它并强制执行onHandleIntent (android.content.Intent) 。
Service 和 IntentService 的区别
Service |
Intent Service |
---|---|
If the task doesn’t require any and also not a very long task you can use service. | If the Background task is to be performed for a long time we can use the intent service. |
we use the method onStartService() to start the service | we use the method Context.startService(Intent) to start the intent service |
Service will always run on the main thread. | intent service always runs on the worker thread triggered from the main thread. |
There is a chance of blocking the main thread. | tasks will be performed on a queue basis i.e, first come first serve basis. |
To stop service we have to use stopService() or stopSelf() | No need to stop the service, it will stop automatically. |
Easy to interact with the UI of the application. | Difficult to interact with the UI of the application. |