Android--四大組件之Service

1. Service是什么?

2. 啟動方式

1). 差異
2). 關(guān)聯(lián)

3. 生命周期

1). startService
2). bindService

4.本地服務(wù)與遠程服務(wù)

5.IntentService

6.重啟機制

Service是什么淆院?

作為Android四大組件之一牢贸,Service是一種沒有可視化界面的長生命周期后臺服務(wù),常用于處理一些耗時后臺任務(wù)拍嵌,如:文件操作遭赂,播放音樂,網(wǎng)絡(luò)訪問等横辆。它無法與用戶直接進行交互撇他,一般通過Activity間接的實現(xiàn)用戶交互。

啟動方式

service啟動有兩種方式:startService與bindService狈蚤,啟動后分別對應(yīng)兩種狀態(tài): “started”與“bound”困肩。兩者既可獨立使用,又可混合使用脆侮。

差異

1. 與調(diào)用者的關(guān)系

通過startService啟動后锌畸,service與啟動它的調(diào)用者不存在關(guān)聯(lián),調(diào)用者不可以使用service中的任何方法靖避,同時潭枣,調(diào)用者銷毀后,service仍然存在筋蓖。
而通過bindService啟動卸耘,service與調(diào)用者存在關(guān)聯(lián),一旦調(diào)用者掛了粘咖,service也會跟著銷毀蚣抗。

2. 啟動與結(jié)束

通過startService啟動,通過stopService方法后來停止瓮下,或者通過service.stopSelf()方或者service.stopSelfResult()來停止自身翰铡。無論有多少次startService,只要又一次stopService即可停止讽坏。
通過bindService啟動锭魔,需要通過unbindService解除綁定,或者當調(diào)用者Context銷毀時路呜,service也會銷毀(同時使用了startService啟動了的service除外迷捧,此時context銷毀,service與之的綁定關(guān)系也不存在了漠秋,但是service還是繼續(xù)存活),service可以通過bindService來綁定多個context庆锦。通過bindservice啟動的服務(wù),stopService不會立即停止搂抒,只有當所有的綁定關(guān)系都結(jié)束后艇搀,才會停止服務(wù)。

關(guān)聯(lián)

startService和bindService并不是相斥的焰雕,它們可以混合使用。
通過startService啟動的服務(wù)淀散,還是可以通過bindService進行綁定,此時蚜锨,服務(wù)只有解除所有的綁定關(guān)系后档插,stopService才能起到停止服務(wù)的作用。
而bindService啟動服務(wù)后亚再,同樣還是可以startService,此時調(diào)用unBindService才終止服務(wù)氛悬。(可以參考生命周期推薦的兩篇文章)

生命周期

關(guān)于service的生命周期,這兩篇博文分析得很全面:
有關(guān)Service的startService與bindService在各種情形下生命周期的變化
Android:Service生命周期最全面解析
這里簡單說一下:

  1. 通過startService啟動后棍现,service生命周期包含onCreate--onStartCommand--onDestroy

注意:
1). service被多次startService, onCreate僅調(diào)用一次镜遣,之后都只調(diào)用onStartCommand
2). onStartCommand的調(diào)用次數(shù)即startService的次數(shù)

  1. 通過bindService啟動后,service生命周期包含onCreate--onBind--onUnbind

注意:
1). service被多次bindService, onBind僅調(diào)用一次悲关,之后都只調(diào)用
2). 使用bindService時,一般我們會用到onServiceConnected寓辱,但是有時會可能出現(xiàn)不調(diào)用的情況,可以檢查下在onBind方法是否返回了IBinder
3). 要使用好bindService進行交互诱鞠,最好先了解下Binder相關(guān)機制挎挖,這里不多說般甲,推薦一個博客鹅颊,可以看看:http://gityuan.com/2015/10/31/binder-prepare/

本地服務(wù)與遠程服務(wù)

在AndroidManifest.xml中申明service時,定義屬性android:process=":remote"后锚烦,這個service就變成了一個遠程服務(wù)帝雇,那么,遠程服務(wù)和普通的服務(wù)有什么區(qū)別呢尸闸?
最簡單明顯的區(qū)別是,遠程服務(wù)吮廉,調(diào)用者與服務(wù)不運行在同一個進程內(nèi),這就涉及到跨進程通信問題(IPC及AIDL)宙址。而本地服務(wù)與調(diào)用者運行在同一個進程调卑。
參考 Android:遠程服務(wù)Service(含AIDL & IPC講解)以及上面提到的 Binder機制博客

IntentService

IntentService被稱為“用完即走”服務(wù),是一種Service和HandlerThread的結(jié)合體恬涧,完成任務(wù)后即自動停止,適合于處理與UI無關(guān)的任務(wù)溯捆。
當IntentService被多次調(diào)用時,會多次調(diào)用onHandleIntent现使,以串行的方式依次執(zhí)行任務(wù),執(zhí)行完畢自動停止顽冶。
IntentService應(yīng)當使用startService方式啟動售碳,其onBind方法返回為null强重,如果使用bindService方式啟動,則可能不能進入到onHandleIntent佃声,從而僅相當于普通的service倘要。

重啟機制

https://blog.csdn.net/hehui1860/article/details/41743549 這篇文章分析了service重啟機制的源碼。
具體在service編寫時封拧,可以通過控制onStartCommand返回參數(shù)來實現(xiàn)重啟
相關(guān)的保活問題可以參考http://www.reibang.com/p/2272b9d42172

個人博客: IT老五
微信公眾號:【IT老五(it-lao5)】曹铃,一起源創(chuàng)捧杉,一起學(xué)習(xí)!

ps: 作為重新系統(tǒng)復(fù)習(xí)Android的第二篇筆記味抖,寫完后發(fā)現(xiàn)這篇文章很多內(nèi)容都是附上了鏈接,這里僅僅做了系統(tǒng)的介紹蜕着,具體內(nèi)容可以點擊相關(guān)鏈接去深入红柱。(偷懶了罒ω罒)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市韧骗,隨后出現(xiàn)的幾起案子零聚,更是在濱河造成了極大的恐慌袍暴,老刑警劉巖隶症,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚂会,死亡現(xiàn)場離奇詭異,居然都是意外死亡胁住,警方通過查閱死者的電腦和手機刊咳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門娱挨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跷坝,你說我怎么就攤上這事或听。” “怎么了誉裆?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵足丢,是天一觀的道長。 經(jīng)常有香客問我庇配,道長,這世上最難降的妖魔是什么捞慌? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任啸澡,我火速辦了婚禮,結(jié)果婚禮上嗅虏,老公的妹妹穿的比我還像新娘。我一直安慰自己楞艾,他們只是感情好,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布硫眯。 她就那樣靜靜地躺著择同,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谆刨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天痊夭,我揣著相機與錄音,去河邊找鬼虹曙。 笑死番舆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的恨狈。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼返奉,長吁一口氣:“原來是場噩夢啊……” “哼吗氏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弦讽,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤往产,失蹤者是張志新(化名)和其女友劉穎被碗,沒想到半個月后捂齐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡包颁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年压真,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岳悟。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呵俏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情普碎,我是刑警寧澤录平,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站动猬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赁咙。R本人自食惡果不足惜燃逻,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伯襟。 院中可真熱鬧握童,春花似錦、人聲如沸稽揭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽步鉴。三九已至,卻和暖如春氛琢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骚勘。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俏讹,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓户矢,卻偏偏與公主長得像于微,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子株依,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容