Android Service 中的 sticky 机制

 Android Service 有三种sticky 机制分别是:START_STICKY、START_NOT_STICKY、START_REDELIVER_INTENT;

1、START_STICKY

class MyStickyService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        // 服务被杀死后会尝试重新创建服务
        // 新的 Intent 为 null
        return START_STICKY
    }
}

2、START_NOT_STICKY

class NonStickyService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        // 服务被杀死后不会重新创建
        return START_NOT_STICKY
    }
}

3、START_REDELIVER_INTENT

class RedeliverService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        // 服务被杀死后会重新创建
        // 并重新传递最后一次的 Intent
        return START_REDELIVER_INTENT
    }
}

使用场景:

1. START_STICKY:

  • 后台音乐播放
  • 持续性服务
  • 需要一直运行的服务

2. START_NOT_STICKY:

  • 定时任务
  • 一次性操作
  • 非必须服务

3. START_REDELIVER_INTENT:

  • 文件下载
  • 数据同步
  • 需要继续之前任务

注意事项:

  1. 系统资源紧张时可能无法重启
  2. Android 8.0 后台限制
  3. 需要处理 null intent
  4. 考虑电池优化影响
  5. 前台服务优先级更高

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值