Service是Android的四大组件之一,在后台运行,是不可见的
Service不是一个单独的进程,Service对象本身并不意味着他运行在自己的进程中,除非另有规定,否则和程序运行在一个进程中。。
Service不是一个线程,是运行在主线程中的,如果要进行下载数据的一些耗时操作时,需要开启一个子线程,否则会造成ANR异常。
Service有两种启动模式:
1,startService:生命周期-onCreate-onStartCommand-onDestory;其中运行过程是,当调用startService第一次启动的时候,Service的生命周期会执行onCreate和 onStartCammand方法,但第二次调用则会执行onStartCammand,当调用stopService时,Service的生命周期会执行onDestory方法。
停止Service的方式有两种:context调用stopService或者Service自身调用stopSelf。
onStartCommand方法中的返回值的类型:
START_STICKY 粘性服务 常量1 当服务被系统异常杀死之后 服务会被重启 但是Intent 值为 null
START_NOT_STICKY 非粘性服务 常量2 当服务被系统异常杀死之后 服务不会重启
START_REDELIVER_INTENT 常量3 当服务被系统异常杀死之后 服务会重启 并且 Intent 有值
START_STICKY_COMPATIBILITY 常量0 当服务被系统异常杀死之后 服务不一定会重启 START_STICKY的兼容版本 了解
2,bindService:生命周期-onCreate-onBind-onUnbind-onDestory 运行过程中Service生命周期的方法都只调用一次。
1.当多个客户端都与一个Service 都产生绑定关系的时候 Service 的生命周期 也都只会执行一次 但是 Client
中监听与服务链接状态变化的类中的 onServiceConnected方法 会执行(初次链接的时候)
2.当多个客户端都与一个Service
产生绑定关系的时候 ,只有所有的Cilent都调用了unBindService方法的时候 Service 才会执行 onUnbind
3.当已经与服务解除绑定的时候 ,不能再次接触绑定,需要做一个标记 标记当前已经与服务解除绑定了
BindService: 允许Client 与Service 产生链接 并能够获取到Service 对象 并与之交互
为了提供这种绑定的功能 必须实现onBind()方法,需要通过IBinder机制将service对象返回。