BindService引发的demo

本文探讨了在Android多进程中使用bindService绑定Service时的行为差异,包括不同情况下Service的生命周期变化,以及如何通过死亡代理机制实现Service进程的拉活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Demo的环境: 进程1: ActivityA ,进程2:ServiceA,进程3:ActivityB

说明:进程1:ActivityA,表示ActivityA在进程1中,后续类推

1.ActivityA 以bindService方式启动ServiceA, 按Back退出ActivityA或在ActivityA中主动unbindService ServiceA,此时,ServiceB调用unBind回调和onDestory,但进程2仍然存活;

2.ActivityA以bindService方式启动ServiceA,此时主动杀死进程2,如果在ActivityA绑定ServiceA时设置了死亡代理,此时则触发死亡代理,此时可以在这个方法中对Service2拉活;

3.ActivityA以bindService方式启动ServiceA,此时进程1主动自杀,ActivityA死亡,ServiceB也随之死亡,但进程2仍旧存活;

4.ActivityA先以startService方式启动ServiceA,此时在主动bindService 方式绑定ServiceA,ServiceA此时流程是调用onBind->onServiceConnect,当销毁ActivityA时,ServiceA调用unBind。再次进入ActivityA且主动去绑定ServiceA,此时只调用onServiceConnect而没有onBind;

5.ActivityA bindService方式绑定ServiceA后,此时调用ServiceA的onBind-》onServiceConnect,ActivityA再次启动ActivityB,ActivityB也主动去bindService方式绑定ServiceA,此时不会触发onBind回调只调用了onServiceConnect,此时再销毁ActivityB,也没有调用unBind,当销毁ActivityA时,才调用ServiceA的unBind;

6.只有当ServiceA进入unBind回调时,杀死进程2,才不会调用相关客户端死亡代理;

说了这么多,总结就是当多个客户端绑定了Service,只有第一个客户绑定时才调用onBind,只有最后一个客户销毁时才调用unBind;当Service被绑定后,只有杀死Service所在进程(且service没有在unBind态),才会调用客户端的死亡代理。诸多细节只有自己实践后才能发觉。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值