BindService引发的demo

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态),才会调用客户端的死亡代理。诸多细节只有自己实践后才能发觉。


你可能感兴趣的:(aidl,Binder,bindService,DeathRecipient)