【从零到一】Android四大组件(四) | Service(服务)
1. 服务是什么
服务(即Service
)是Android四大组件之一,属于计算型组件
,Service
不依赖任何用户界面,适合运行不需要与用户交互但需要长时间在后台运行的任务。由于Service
是在UI线程
里执行操作的,因此耗时的后台计算建议在Service
里创建单独的Thread
执行。Service
需要在AndroidManifest.xml
中注册,也需要借助Intent
启动。
了解完Service
的基本概念,下面就让我们看看Service
需要掌握的内容吧。包括Service的生命周期
,Service的种类
,以及服务都有哪些用法
吧。
2. 服务的生命周期
下面让我们看下Service
的生命周期图
:
从上图可以看出,Service
有两种不同的打开方式(启动服务
、绑定服务
)。在详细讲解这两种方式前,让我们先通过表格看看几个自动回调方法:
回调方法 | 作用 |
---|---|
onCreate() | 创建服务 |
onStartCommand() | 开始服务 |
onBind() | 绑定服务 |
onUnbind() | 解绑服务 |
onDestroy() | 销毁服务 |
看完表格,是不是很简单呢?那么还是来了解下Service
的两种不同的打开方式吧~
启动服务
- 启动服务是由组件通过
startService()
方法来启动Service
,如果是第一次启动Service
,则回调onCreate()
->onStartCommand()
(不是则只回调onStartCommand()
方法)。然后Service
一直运行下去,即使启动Service
的组件被销毁也不受影响,直到调用了stopService()
或stopSelf()
方法,回调onDestroy()
方法,服务被销毁。启动服务一般只执行单一操作,不会返回结果给调用方。
绑定服务
- 绑定服务则是由组件通过
bindService()
方法来进行绑定Service
,如果是第一次绑定Service
,则回调onCreate()
->onBind()
(不是则只回调onBind()
方法)。绑定服务提供一个客户端-服务器端的接口,此时,调用方可以获取到onBind()
方法里返回的一个IBinder
对象的实例,]从而达到与Service
进行交互。Service
会一直运行下去,直到调用了unbindService()
方法,回调onUnbind()
->onDestroy()
方法,服务被销毁。
要接收
IBinder
,客户端必须提供一个ServiceConnection
实例用于监控与服务的连接,并将其传递给bindService()
。当 Android 系统创建了客户端与服务之间的连接时,会回调ServiceConnection
对象onServiceConnected()
方法,向客户端传递用来与服务通信的IBinder
,从而达到与Service
进行交互。
其实Service
的打开方式还有第三种:
启动且绑定服务
-
Service
既可以启动服务,同时也能绑定服务。此时需要回调onStartCommand()
和onBind()
方法。在销毁服务时,也需要同时调用stopService()
(或stopSelf()
)和unbindService()
方法。
紧接着让我们来看下服务的类别。
3. 服务的分类
服务按照运行类型
可以分为后台服务
(最常见)和前台服务
,按照运行地点
可以分为本地服务
和远程服务
:
4. 服务的基本用法
4.1 服务的使用步骤
待更。