目录
本文介绍了Android四大组件之一Service的基本概念和常见用法。包括服务的生命周期及其两种启停方式——普通方式和绑定方式(含立即绑定和延迟绑定),还介绍了如何在活动和服务之间交互数据。
服务的启动和停止
既然Android自带了系统服务,App也可以拥有自己的服务。Service与Activity相比,不同之处在于没有对应的页面,相同之处在于都有生命周期。想要用好服务,就要弄清楚它的生命周期。
Service与生命周期有关的说明如下:
- onCreate:创建服务。
- onStart:开始服务,Android 2.0以下版本使用,现已废弃。
- onStartCommand:开始服务,Android 2.0及以上版本使用。该方法的返回值说明见表
返回值类型 | 返回值说明 |
---|---|
START_STICKY | 黏性的服务。如果服务进程被杀掉,就保留服务的状态为开始状态,但不保留传送的Intent对象。随后系统尝试重新创建服务,由于服务状态为开始状态,因此创建服务后一定会调用onStartCommand方法。如果在此期间没有任何启动命令传送给服务器,参数Intent就为空值 |
START_NOT_STICKY | 非黏性服务。使用这个返回值时,如果服务被异常杀掉,系统就不会自动重启该服务 |
START_REDELIEVER_INTENT | 重传Intent的服务。使用这个返回值时,如果服务被异常杀掉,系统就会自动重启该服务,并传入Intent的原值 |
START_STICKY_COMPATIBILITY | START_STICKY的兼容版本,但不保证服务被杀掉后一定能重启 |
- onDestroy:销毁服务。
- onBind:绑定服务。
- onUnbind:解除绑定。返回值为true表示允许再次绑定,之后在绑定服务时,不会调用onBind方法而是调用onRebind方法;返回值为false表示只能绑定一次,不能再次绑定。
- onRebind:重新绑定。只有上次的onUnbind方法返回true时,再次绑定服务才会调用onRebind方法。
服务的生命周期也存在好几个环节,除了必须的onCreate方法和onDestroy方法,还有其他几种生命周期方法。接下来已普通启停为例,讲解服务的生命周期过程。
首先在Java代码包下面创建名为service的新包,右击该包并在右键菜单中依次选择New→Service→Service,弹出下示服务创建对话框。
在服务创建对话框的Class Name一栏填写服务名称,比如NormalService ,再点击Finish按钮,Android Studio便自动再service包下生成NormalService .java,同时在AndroidManifest.xml的application节点内部添加如下的服务注册配置:
<service
android:name=".service.NormalService"
android:enabled="true"
android:exported="true" />
打开NormalService .java,为了方便观察服务的生命周期过程,需要重写该服务的所有周期方法,给每个方法都打印相应的运行日志。
public class NormalService extends Service {
pr