Service的生命周期onStartCommand开启两次

1.先记录一下使用的场景:

App里面有个Service 里面封装了Socket,用来接收服务器推送信息,其onStartCommand的模式是START_STICKY(保活),用的Socket框架mina,自己封装了。服务的开启放在了application中。

2.运行情况

  • 在正常起开Socket的时候onStartCommand只走一次。

  • 当呼出多任务滑动杀死APP后,则APP后台还会重启,因为我前面说过的设置了保活策略模式(有待检测其有效性),就会导致onStartCommand的生命周期走两次,其中在杀死的时候并没有走onDestroy。

3.模拟情况

新建立了个Service 的Demo 并没有mina Socket框架,同样的情况,均按照正常的生命周期执行。

分析,由于在Service中使用了Socket,使得在杀死APP的时候并没有使得Socket彻底杀死,因为没有onDestroy方法,确定的是走了APPlication中的开启服务的方法,这样会走一次onStartCommand,但是走了两次实在是想不通。

1.第一次正常启动:

服务的生命周期方法:onStartCommand---22874-22874

2.呼出多任务后滑动APP结束任务:

重启后的进程PID 一样

服务的生命周期方法:onStartCommand---23094-23094

服务的生命周期方法:onStartCommand---23094-23094

两次的onStartCommand事件时间几毫秒内,有知道的请告知,谢谢。
在这里插入图片描述

Android 中,Service 是一种后台运行的组件,它可以在不与用户交互的情况下执行长时间运行的任务。Service 有两种类型:Started Service 和 Bound Service。 对于 Started Service,它是通过 startService() 方法启动的,而 onStartCommand() 方法是它的生命周期方法之一,用于响应 startService() 方法的调用。 onStartCommand() 方法在 Service 第一次启动时调用,并在每次调用 startService() 方法时都会被调用。它的返回值表示 Service 的启动类型,有以下三个选项: 1. START_NOT_STICKY:Service 被杀死后不会自动重启。 2. START_STICKY:Service 被杀死后会自动重启,并尝试重新创建之前未完成的任务。 3. START_REDELIVER_INTENT:Service 被杀死后会自动重启,并尝试重新创建之前未完成的任务,同时还会重新传递 Intent。 而 onCreate() 方法则是 Service生命周期方法之一,用于初始化 Service。它在 Service 第一次被创建时调用,而 onStartCommand() 方法则在 onCreate() 方法之后调用。 总结一下,Service生命周期如下: 1. onCreate():用于初始化 Service。 2. onStartCommand():用于响应 startService() 方法的调用,并决定 Service 的启动类型。 3. onDestroy():用于销毁 Service。 对于 Bound Service,它是通过 bindService() 方法启动的,与 Started Service 不同,它需要与客户端进行绑定,因此需要 onBind() 方法来返回 IBinder 接口,以便客户端与 Service 进行交互。Bound Service生命周期方法如下: 1. onCreate():用于初始化 Service。 2. onBind():用于返回 IBinder 接口。 3. onUnbind():用于解绑 Service。 4. onDestroy():用于销毁 Service
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值