关于Service生命周期的那些事

1.概述

  作为四大组件之一的Service,主要作用于后台,例如下载等,无UI界面

2.生命周期

  Service的生命周期会因其启动方式,有所差异。Service的启动方式有两种startService()bindService()

2.1startService()启动Service,生命周期流程图如下:

startService()启动流程图

由上图可知:

1.当Service通过startService()方法被多次调用时,onCreate()只会创建一次,onStartCommand()会被多次创建。

2.startService()每调用一次,onStartCommand()都会被调用一次,所以两者的次数是一致的。

2.2bindService()启动Service,生命周期如下

binderService

需要注意的几点

1.当Service通过bindService()方法被多次调用时,onCreate()onBind()只会创建一次,不会重复创建

2.当onBind()的返回值为空时,其生命周期onCreate() ==> onBind();当onBind()的值不为空时,其生命周期为onCreate() ==> onBind()==> onServiceConnected();

2.3关闭Service

1.通过startService()启动的Service

startService启动

  

2.通过bindService()启动Service

Caption

3.即用startService(),也用bindService()启动Service

两种方法同时启动

    对于第三种方式需要注意一下几点

1.当两种方式同时启动Service时,在关闭时,需要同时调用stopService()unBindService()(两者调用的先后顺无影响),如果只调用了其中一个,都不会执行onDestroy(),服务也不会关闭。

2.两种方式的onDestroy()都执行一次,当服务已解绑,再次调用stopService()或者unBindService(),会直接报错。

总结:

1.startService()开启Service后,调用stopService()后,服务并没有退出。

2.bindService()开启Service后,与其关联的Activity或者Fragment销毁时,必须调用unBindService()解绑,否则会造成内存泄露。

参考资料:

1.https://blog.csdn.net/carson_ho/article/details/53160137

2.https://www.jianshu.com/p/d870f99b675c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值