Android开发:Service

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对象返回。


猜你喜欢

转载自blog.csdn.net/u010256329/article/details/51693677