Service詳解

Service組件詳解.png

生命周期

service的生命周期相對(duì)activity來(lái)說(shuō)比較簡(jiǎn)單,一個(gè)servcie的生命周期從創(chuàng)建到銷(xiāo)毀有兩條路徑:

  • started servcie
    當(dāng)其他的組件調(diào)用startService()時(shí)候service被創(chuàng)建,之后這個(gè)service一直運(yùn)行直到它自己調(diào)用stopSerlf()或者其他的組件調(diào)用stopService()
  • bound servcie
    當(dāng)前他組件調(diào)用bindServcie的時(shí)候service被創(chuàng)建,client可以IBinder接口和service通信,client也可以通過(guò)調(diào)用unbindService()來(lái)關(guān)閉連接,多個(gè)client可以綁定到同一個(gè)service,只有當(dāng)所有的clint都解綁service之后,系統(tǒng)才會(huì)銷(xiāo)毀service。這種情況下service不需要stop它自己。
  • 這兩種路徑并不是完全獨(dú)立的,你可以綁定一個(gè)已經(jīng)started的service,例如你可以通過(guò)調(diào)用startService()來(lái)啟動(dòng)一個(gè)后臺(tái)service播放音樂(lè)。然后你可以通過(guò)調(diào)用bindService()來(lái)使activity綁定這個(gè)service,用戶(hù)就可以控制播放器的播放以及獲得當(dāng)前音樂(lè)相關(guān)的信息。這種情況下stopService()和stopSelf()不能真正銷(xiāo)毀這個(gè)service,除非所有的clinets接觸綁定。
service_lifecycle.png

如需了解Bound Service的詳細(xì)信息,請(qǐng)參閱 Bound Service詳解

基本知識(shí)點(diǎn)細(xì)節(jié)

  1. 同一個(gè)Service,onCreate()和onDestroy()只會(huì)走一遍。
  2. 每次調(diào)用onStartService()方法,都會(huì)回調(diào)onStartCommand(Intent intent, int flags, int startId)方法。
  3. bindService()方法的回調(diào)onServiceConnected()是異步的。
  4. 只有第一次調(diào)用bindService()方法會(huì)回調(diào)onBind(Intent intent)的方法。
  5. 同一個(gè)Activity實(shí)例多次重復(fù)調(diào)用bindService()方法,只會(huì)創(chuàng)建一次連接(只會(huì)bind一次),也就是只有第一次會(huì)回調(diào)onServiceConnected()方法。
  6. 如果某個(gè)Activity已經(jīng)bindService了,必須在Activity.onDestory()生命周期或之前unbindService,否則拋出以下異常:
${ActivityName} has leaked ServiceConnection ${ServiceConnectionName} that was originally bound here
  1. 只有所有client都調(diào)用了unbindService才會(huì)走onBind()生命周期回調(diào),如果只是一個(gè)bound service,此時(shí)才會(huì)走onDestroy生命周期。
  2. 如果一個(gè)service即使start service又是bound service,只有所有的client都解綁了,在調(diào)用stopService或者stopSelf才會(huì)走onDestroy生命周期。
  3. 如果Service實(shí)現(xiàn)onUnbind返回true,且一個(gè)started service 第一次bind之后再u(mài)nbind,第二次bind時(shí)不會(huì)走onBind生命周期,而是走onRebind()的生命周期。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Service簡(jiǎn)介 Service是Android程序中四大基礎(chǔ)組件之一,是在后臺(tái)運(yùn)行的組件。 Service...
    提升即效率閱讀 969評(píng)論 0 1
  • 上篇我們講解了Android中的5中等級(jí)的進(jìn)程,分別是:前臺(tái)進(jìn)程、可見(jiàn)進(jìn)程、服務(wù)進(jìn)程、后臺(tái)進(jìn)程、空進(jìn)程。系統(tǒng)會(huì)按照...
    徐愛(ài)卿閱讀 3,978評(píng)論 6 33
  • 什么是Service 先看一下google官方的介紹: Service是一個(gè)可以在后臺(tái)執(zhí)行長(zhǎng)時(shí)間運(yùn)行操作而不提供用...
    Cris_Ma閱讀 870評(píng)論 0 0
  • 這篇文章主要是講解Service 前言:Service非常適用于去執(zhí)行那些不需要和用戶(hù)交互而且還要長(zhǎng)期運(yùn)行在后臺(tái)的...
    李慶雪閱讀 6,010評(píng)論 2 7
  • onCreate()方法只會(huì)在Service第一次被創(chuàng)建的時(shí)候調(diào)用,如果當(dāng)前Service已經(jīng)被創(chuàng)建過(guò)了,不管怎樣...
    一只好奇的茂閱讀 2,125評(píng)論 0 18

友情鏈接更多精彩內(nèi)容