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