Service 服务有关细节

本文探讨了Android中Service的启动及重启机制,特别是startService方法触发的Service行为。分析了startCommand方法的不同返回值如何影响Service的重启逻辑,并指出在特定Android版本下观察到的异常现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天发现通过 startService 方法 开启的Service在程序异常崩溃之后,发现service 里面逻辑代码又重新走了一遍。造成异常

想到startCommand 方法中有三个返回值跟service 异常kill 自动重启有关,但是代码里并未重写onstartCommand方法

那么它的默认默认返回值是什么?

查看源码:

  public @StartResult int onStartCommand(Intent intent, @StartArgFlags int flags, int startId) {
        onStart(intent, startId);
        return mStartCompatibility ? START_STICKY_COMPATIBILITY : START_STICKY;
    }
mStartCompatibility = getApplicationInfo().targetSdkVersion
                < Build.VERSION_CODES.ECLAIR;
如果当前的targetSdkVersion 小于 Android 2.0 版本 则为 
START_STICKY_COMPATIBILITY  否则 为START_STICKY

关于参数返回值解释 


最后 通过bindService 不会走onStartCommand方法,并且 服务异常kill 也不会重启

android 8.1 发现一问题: 当 程序发生异常终止时候,service 自动重启后,走oncreate() 方法 ,而再次打开app时 调用startService 方法竟然还会走一遍 oncreate 方法? 前提是service 重启之后还在运行当中  ,按道理来讲当 service 已经存在时候onCreate方法只会走一次,暂时想不明白为什么? 而在android 4.4 中 是正常的逻辑 onCreate 只会走一次



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值