Android Service 总结:生命周期与onReBind

start 和 bind 启动Service 的区别

在只使用一种启动方式的情况下,生命周期的区别。

  • Activity 调用 startService() 创建的Service的生命周期 与 Activity 无关。需要自己控制Service 销毁。
  • Activity 调用 bindService() 创建的Service的生命周期 与 Activity 有关,Activity销毁则 Service 销毁。 所有绑定的 Activity 都调用 unbindService 后,Service也会销毁。

回调方法的区别: 当点击按钮触发 启动或绑定 Service的时候

  • 多次调用 startService() 会回调多次 onStartCommand()。
  • 多次调用 bindService() ,只会回调一次 onBind()。
  • 如果使用 bindService() ,并且创建了 Binder对象并在Service 的 onBind 方法中返回。那么多次调用 bindService() ,会多次回调 ServiceConnection 的 onServiceConnected 方法。
  • ServiceConnection 的onServiceDisconnected()方法在连接正常关闭的情况下是不会被调用的, 该方法只在Service 被系统杀死,例如, 系统资源不足时。 才会回调,也是监听服务是否异常终止的一种方式。

在这里插入图片描述

Bind 方式下 onUnbind() 与 onRebind() 的使用

有一种情况 。通过 startService()创建Service,并且Service 的生命周期很长时 。某个Activity 先绑定了 bindService,然后再unbindService 。然后又 bindService 。然后又unbindService 。

第一个问题:第二次绑定回调的是 onBind 还 是 onReBind 呢?
答:

  • onUnbind() 返回 false 。第二次绑定,不会触发onReBind 。也不会触发onBind 。触发ServiceConnection 的 onServiceConnected (是不是很神奇。)
  • onRebind() 返回 true 。第二次绑定。触发 onReBind 。不触发 onBind。触发ServiceConnection 的 onServiceConnected

第一个问题:第二次调用 unbindService ,是否会回调 onUnbind?
答:

  • 当 onUnbind() 返回false的时候,不管多次绑定解绑,都不会重复回调onUnbind。只在第一次解绑时回调一次。
  • 当 onUnbind() 返回true 时 。多次绑定解绑都会回调 onUnbind。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值