安卓 Service启动的生命周期大杂烩

一、startService()

1、第一次启动service

onCreate()  ->  onStartCommand() -> (此时service已经在运行) -> (我们代码中调用 stopService()) -> onDestroy()

ok 这个就是一场单独startSever() 启动service的一次完整的生命周期

 

2、第二次启动service(这个第二次启动 前提是service没有onDestroy(),不然还是啥第二次呢,这是我的废话忽略)

onCreate() -> onStartCommand() ->(此时service已经在运行) -> (我们代码中继续调用 startService())-> onStartCommand()

yes!,直接调用onStartCommand(),因为该service实例已经存在 不需要调用onCreate()

 

注意:一个组件启动一个服务 ,启动后组件就不管这个服务了,爱干嘛干嘛,就是组件被销毁,服务还是存在的。同样组件和该服务是不能直接通信的哦!

 

二、bindServer()

1、第一次绑定服务

onCreate() -> onBind() -> (此时service已经在运行) -> (我们代码中调用 unbindService() 或者 绑定该service的组件被销毁) -> onDestroy()

2、第二次绑定服务

这个时候你肯定大喊我知道 肯定不会调用onCreate() ,然后直接调用onBind()

嘻嘻,你错了哦,不会调用onCreate(),是对的,但是也不会再次调用onBind(),因为只需要绑定一次就足够!

 

注意:一个组件绑定一个服务 这个时候他们只联系在一起的 ,组件被销毁  这个service也被销毁  ,同样,既然绑定了那肯定能通信,这个通信以后在细说,本章只说生命周期。

 

Service生命周期的特殊存在 ,一个服务可以被启动也可以同时被绑定 ,关键点 :启动服务 然后stopservice 如果该服务被其他组件绑定的话,这个时候这个service不会被销毁 除非绑定它的组件与它解绑 这个service才能被销毁。同理同时绑定 和启动一个服务 解绑后 这个服务 不会直接销毁 除非stopservice 这个service才能被销毁。总结一句话:一个服务同时被启动和绑定的话,只有全部 取消绑定和stop 这个服务才能被销毁 ,不然组件会说:这个服务我正在用呢,你TM可不能销毁!

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值