Service 生命同期
startService 和bindService 區(qū)別
startService: onCreate -> onStartCommand -> onDestory 侨歉,在多次調用startService的時候屋摇,onCreate不重復執(zhí)行,但是onStartCommand會執(zhí)行幽邓。startService調用了這后炮温,會一直存在,直到其調用了stopService颊艳。
bindService : onCreate -> onBind -> onUnbind -> onDestory茅特,多次調用bindService忘分,onCreate及onBind都只執(zhí)行一次棋枕。它生命周期跟隨其調用者,調用者釋放的時候妒峦,必須對該Service解綁重斑,當所有綁定全部取消后,系統(tǒng)即會銷毀該服務肯骇。 bindService 的方式通過onServiceConnected方法窥浪,獲取到Service對象,通過該對象可以直接操作到Service內部的方法笛丙,從而實現的Service 與調用者之間的交互漾脂。
使用場景
如果想要啟動一個后臺服務長期進行某項任務,那么使用startService
如果只是短暫的使用胚鸯,那么使用bindService骨稿。
如果想啟動一個后臺服務長期進行任務,且這個過程中需要與調用者進行交互姜钳,那么可以兩者同時使用坦冠,或者使用startService + BoardCast/ EventBus 等方法。
對于既使用startService哥桥,又使用bindService的情況辙浑,結束服務時需要注意的事項:
- Service的終止,需要unbindService和stopService都調用才行拟糕;
順便提一下IntentService判呕,與Service的區(qū)別在于它內部封裝了一個工作線程倦踢,也就是說,在其內部onHandleIntent的代碼都是在子線程里面工作的佛玄。