记录一下对service生命周期的理解

最近突然想测试一下android service的生命周期,于是就自己写了一个demo感受了一下,确实挺奇妙的。

service有两种启动方式,bindservice和startservice,单独使用的话,生命周期很明显:

第一种:bindservice(),三个参数,第一个intent,第二个是一个interface -> serviceconnection,第三个参数是bind的类型,有这么几种:

BIND_AUTO_CREATE //表示收到绑定请求的时候,如果服务尚未创建,则即刻创建,在系统内存不足需要先摧毁优先级组件来释放内存,且只有驻留该服务的进程成为被摧毁对象时,服务才被摧毁
BIND_DEBUG_UNBIND //通常用于调试场景中判断绑定的服务是否正确,但容易引起内存泄漏,因此非调试目的的时候不建议使用
BIND_NOT_FOREGROUND //表示系统将阻止驻留该服务的进程具有前台优先级,仅在后台运行,该标志位位于Froyo中引入。
BIND_ABOVE_CLIENT和BIND_IMPORTANT //当你的客户端在前台,这个标示符下的Service也变得重要性相当于前台的Activity
优先级迅速提升。若是BIND_ABOVE_CLIENT,则优先级已经超过了Activity,也就是说Activity要比Service先死,
当资源不够的时候。
BIND_ALLOW_OOM_MANAGEMENT

通过bindservice启动一个service的生命周期是onCreate-->onBind-->(onServiceConnection)->onDestory

第二种:startService() 就一个参数,一个intent,生命周期:

onCreate-->onStartCommand->onDestory


如果bind一个service之后调用stopService会怎么样呢?

答案是没用

也就是说不会掉用onDestory,当然了这都是通过context里面的方法调用的,在service里面去调用stopSelf()也是不可以把当前Service停掉的,只能通过unbindservice来停止

如果start一个service之后是可以再bind这个service,并且bind这个service之后是不可以调用stopService停止的。bind的时候只会调用onBind生命周期。

在测试过程中会发现一个startId的东西,这个东西是干什么用的呢?

这个startId是记录service start的次数,也算是一个标记吧,当调用stopSelf(int startId)的时候,可以传一个startId来停止服务。这样只有在达到预定的start次数才会停止。


今天就先记录到这里吧,有空再去测试其他的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值