生命周期如下:
兩種啟動(dòng)方式
第一種方式: startService()
通過startService啟動(dòng)后处坪,service會(huì)一直無限期運(yùn)行下去,只有外部調(diào)用了stopService()或stopSelf()方法時(shí),該Service才會(huì)停止運(yùn)行并銷毀瞬雹。
當(dāng)?shù)谝淮握{(diào)用的時(shí)候悄晃,方法順序是:
構(gòu)造方法——oncreate()——onStartCommand()
當(dāng)?shù)诙伪徽{(diào)用的時(shí)候,直接調(diào)用onStartCommand()
結(jié)束:stopService():——>onDestory()
第二種方式:bindService()
bindService啟動(dòng)的服務(wù)和調(diào)用者之間是典型的client-server模式褥蚯。調(diào)用者是client挚冤,service則是server端。service只有一個(gè)赞庶,但綁定到service上面的client可以有一個(gè)或很多個(gè)训挡。這里所提到的client指的是組件澳骤,比如某個(gè)Activity。
client可以通過IBinder接口獲取Service實(shí)例澜薄,從而實(shí)現(xiàn)在client端直接調(diào)用Service中的方法以實(shí)現(xiàn)靈活交互为肮,這在通過startService方法啟動(dòng)中是無法實(shí)現(xiàn)的。
bindService啟動(dòng)服務(wù)的生命周期與其綁定的client息息相關(guān)肤京。client也可以明確調(diào)用Context的unbindService()方法與Service解除綁定弥锄。當(dāng)所有的client與service解除綁定的時(shí)候,才會(huì)調(diào)用onUnbind,然后 Service會(huì)自行銷毀蟆沫。
第一次調(diào)用:
構(gòu)造方法——oncreate()——onBind()——onServiceConnected()
結(jié)束:unbindService():如果當(dāng)前有Activity與Service相連——>onUnbind()——>onDestory()
Intentservice
IntentService 是繼承于 Service 并處理異步請(qǐng)求的一個(gè)類籽暇,在 IntentService 內(nèi)有一個(gè)工作線程來處理耗時(shí)操作,啟動(dòng) IntentService 的方式和啟動(dòng)傳統(tǒng) Service 一樣饭庞,同時(shí)戒悠,當(dāng)任務(wù)執(zhí)行完后,IntentService 會(huì)自動(dòng)停止舟山,而不需要我們?nèi)ナ謩?dòng)控制绸狐。