Service

作者: 真胖大海 | 来源:发表于2019-11-08 17:12 被阅读0次
  1. Service 的start和bind有什么区别

    1. startService
      1. 使用start启动Service,Service有独立的生命周期,不与组件绑定。
      2. 多次start启动Service,onCreate只会调用一次,onStartCommand会被调用多次.
        3.不管调用几次startService,只要调用 stopSelf或者stopService便会使服务停止。此时onDestroy()会被调用
    2. bindService
      1. 使用bind绑定组件,Service会与组件绑定 。
      2. 多次绑定组件,onCreate和onBind只会调用一次。
      3. 组件调用unBindService与Service解除绑定,所有与Service绑定的组件与Service解除绑定后,Service停止,此时调用onUnbind()与onDestroy();
  2. 同一个Service,不当通过startService启动而且通过bindService绑定,如何把它停止掉。
    必须满两个条件

    1. 调用stopService/stopSelf
    2. 所有组件与Service解除绑定
      最后一个stopService/stopSelf 或者 unBindService 触发onDestroy
  3. onStartCommand的4种返回值的意义
    文档

    1. START_STICKY
      如果服务被意外kill掉,保留服务为start状态,稍后尝试重启服务,但是不保留递送的Intent。Service被重建后,如果没有新的消息,Inent将会为null。
    2. START_NOT_STICKY
      服务被意外kill掉,不尝试重启服务
    3. START_REDELIVER_INTENT
      如果服务被意外kill掉,保留服务为start状态,稍后尝试重启服务,且保留递送的Intent。
    4. START_STICKY_COMPATIBILITY
      START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

默认返回值为
START_STICKY或者START_STICKY_COMPATIBILITY。

  1. onStartCommand 中的flags参数的意义
    flags参数对应onStartCommand的返回值
    1. START_FLAG_REDELIVERY
      对应START_REDELIVER_INTENT
      表示 onStartCommand()之前返回过START_REDELIVER_INTENT,此Service意外被kill掉后系统重新创建Service,此时发送的Intent是之前保留的。
    2. START_FLAG_RETRY
      应该对应START_STICKY
      表示 onStartCommand()之前返回过START_STICKY,此Service意外被kill掉后系统重新创建Service,此时发送的Intent可能是null。
    3. 0
      正常情况
  2. Service的onCreate,onStartCommand,onBind运行在什么线程
    主线程

最后附上一张Service生命周期图

image.png

相关文章

网友评论

      本文标题:Service

      本文链接:https://www.haomeiwen.com/subject/tdjwbctx.html