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態),纔會調用客戶端的死亡代理。諸多細節只有自己實踐後才能發覺。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章