service總結(jié)

純粹是個(gè)人學(xué)習(xí)總結(jié)屈雄,如有不對(duì)的地方請(qǐng)吐槽泊愧。

Service是一種在Android應(yīng)用后臺(tái)的一種組件伊磺,沒(méi)有自己的界面,不需要與用戶(hù)交互删咱。
最基本的兩種用途:執(zhí)行長(zhǎng)時(shí)間時(shí)間運(yùn)行的耗時(shí)操作屑埋,如網(wǎng)絡(luò)下載,音樂(lè)播放痰滋,文件系統(tǒng)檢測(cè)摘能。
一種是組件間的交互(通過(guò)將某些功能以Service組件的形式進(jìn)行封裝续崖,然后提供給其他應(yīng)用組件調(diào)用,而不管這些組件是否與Service組件在同一進(jìn)程中)团搞。

Service組件有兩種運(yùn)行模式袜刷,一種是啟動(dòng)模式,一種是綁定模式莺丑。

啟動(dòng)模式

如果Service組件是長(zhǎng)時(shí)間運(yùn)行的操作,則一般采用啟動(dòng)模式
啟動(dòng)模式的Service一般持續(xù)執(zhí)行一個(gè)單一的操作,Service被啟動(dòng)后墩蔓,將一直處于運(yùn)行狀態(tài)梢莽,即使調(diào)用startService的進(jìn)程結(jié)束了,Service仍然還存在奸披,直到有進(jìn)程調(diào)用stopService昏名,或者Service調(diào)用stopSelf自殺。

啟動(dòng)模式下阵面,Service中的業(yè)務(wù)邏輯主要在onStartCommand方法中實(shí)現(xiàn)轻局,其中方法的返回值決定了Service的運(yùn)行模式。
1样刷、START_NOT_STICKY:如果Sevice在啟動(dòng)后仑扑,被kill掉,并且沒(méi)有新啟動(dòng)的Intent傳給它置鼻,那么將Service移出啟動(dòng)狀態(tài)并且不重新生成镇饮,知道再次顯示調(diào)用Context.startService。適用場(chǎng)景:網(wǎng)上下載數(shù)據(jù)箕母。

2储藐、START_REDELIVER_INTENT:如果Service進(jìn)程在啟動(dòng)后kill掉,那么它將會(huì)被重啟嘶是,并且最后傳給他的Intent通過(guò)onStartCommand(Intent ,int,int)會(huì)被重新傳給他钙勃,這種模式保證了傳給它Intent一定會(huì)被處理完畢,適用場(chǎng)景:關(guān)鍵業(yè)務(wù)處理聂喇。

3辖源、START_STICKY:如果Service在它啟動(dòng)后被kill掉,那么Android將讓Service繼續(xù)保持started狀態(tài)授帕,但是不保留啟動(dòng)它的Intent同木,Android將重新創(chuàng)建Service實(shí)例,并執(zhí)行onStartCommand方法跛十,如果此時(shí)沒(méi)有新的Intent請(qǐng)求彤路,此時(shí)Intent的參數(shù)是null,這一點(diǎn)要特別注意芥映。適用場(chǎng)景:后臺(tái)播放音樂(lè)洲尊。這種運(yùn)行模式的特點(diǎn)是需要顯示啟動(dòng)并停止Service远豺。

綁定模式

實(shí)例啟動(dòng)后,將調(diào)用onBind()方法坞嘀,onBind方法返回給客戶(hù)端一個(gè)IBinder接口實(shí)例躯护,IBinder允許客戶(hù)端回調(diào)Service方法,只要連接建立丽涩,Service就會(huì)一直運(yùn)行棺滞,(不管客戶(hù)是否保留Service的IBinder的引用)。通常IBinder是一個(gè)使用AIDL寫(xiě)成的復(fù)雜接口

綁定模式下Service的生命周期:onCreate()--->onBind(只一次矢渊,不能多次綁定)---->onUnbind()--->onDestory()
兩種Service運(yùn)行模式不是完全隔離的继准,通過(guò)調(diào)用startService方法啟動(dòng)的Service對(duì)象實(shí)例也可以被其他進(jìn)程通過(guò)bindService方法來(lái)綁定,此時(shí)矮男,只有對(duì)Service實(shí)例既調(diào)用了stopService移必,也調(diào)用unbindService餓,這個(gè)Service才會(huì)結(jié)束

實(shí)現(xiàn)對(duì)Service組件功能的調(diào)用Service組件要做以下改造:
1毡鉴、將Service組件的功能封裝到一個(gè)接口中崔泵。
2、實(shí)現(xiàn)一個(gè)內(nèi)部類(lèi)猪瞬,它繼承Bind類(lèi)(既實(shí)現(xiàn)IBinder接口)憎瘸,并實(shí)現(xiàn)Service組件的功能接口類(lèi)。
3撑螺、在Service組件的onBind方法中含思,返回步驟2的內(nèi)部類(lèi)對(duì)象,供其他組件使用甘晤。

由于Service是在主線(xiàn)程運(yùn)行的含潘,為避免產(chǎn)生應(yīng)用無(wú)響應(yīng)異常,必須在Service類(lèi)的內(nèi)部創(chuàng)建一個(gè)單獨(dú)的線(xiàn)程线婚,用于耗時(shí)的業(yè)務(wù)邏輯

IntentService:

我們或許會(huì)碰到這么一種業(yè)務(wù)需求遏弱,一項(xiàng)任務(wù)分成幾個(gè)子任務(wù),子任務(wù)按順序先后執(zhí)行塞弊,子任務(wù)全部執(zhí)行完后漱逸,這項(xiàng)任務(wù)才算成功,沒(méi)有一種簡(jiǎn)單的方法來(lái)處理這個(gè)過(guò)程呢游沿,答案就是IntentService

IntentService是繼承于Service并處理異步請(qǐng)求的一個(gè)類(lèi)饰抒,當(dāng)任務(wù)執(zhí)行完后,IntentService會(huì)自動(dòng)停止诀黍〈樱可以啟動(dòng)IntentService多次,而每一個(gè)耗時(shí)操作會(huì)以工作隊(duì)列的方式在IntentService的onHandleIntent回調(diào)方法中執(zhí)行眯勾,并且枣宫,每次只會(huì)執(zhí)行一個(gè)工作線(xiàn)程婆誓,執(zhí)行完第一個(gè)再執(zhí)行第二個(gè)

IntentService(同時(shí)解決了多請(qǐng)求下線(xiàn)程同步的問(wèn)題)。
1也颤、在應(yīng)用的主線(xiàn)程外創(chuàng)建一個(gè)單獨(dú)的工作線(xiàn)程來(lái)執(zhí)行傳遞到onStartCommand方法的Intent組件洋幻。
2、創(chuàng)建一個(gè)工作隊(duì)列翅娶,它每次將一個(gè)Intent傳遞到onHandleIntent()文留,不需要考慮多線(xiàn)程的同步問(wèn)題。
3竭沫、當(dāng)所有請(qǐng)求被處理完成后厂庇,將自動(dòng)停止服務(wù)而不需要顯示調(diào)用stopSelf方法。
4输吏、提供一個(gè)返回null值的onBind方法的默認(rèn)實(shí)現(xiàn)。
5替蛉、提供了onStartCommand方法的默認(rèn)時(shí)間贯溅,它將所有的Intent發(fā)送到一個(gè)工作隊(duì)列,并進(jìn)一步發(fā)送到onHandleInteng方法躲查。

Service不死:

1它浅、service的進(jìn)程具有較高的優(yōu)先級(jí),如:android:priority = "1000"

2镣煮、onStartCommand方法姐霍,返回START_STICKY

3、在onDestroy方法里重啟service

4典唇、一個(gè)不被殺死的進(jìn)程(android:allowBackup="true")镊折,這個(gè)屬性不能亂設(shè)置或許是相當(dāng)于系統(tǒng)級(jí)的進(jìn)程

5、系統(tǒng)各種廣播監(jiān)聽(tīng)介衔,通過(guò)系統(tǒng)的廣播恨胚,監(jiān)聽(tīng)并捕獲到,然后判斷是否需要重新啟動(dòng)service

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炎咖,一起剝皮案震驚了整個(gè)濱河市赃泡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乘盼,老刑警劉巖升熊,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绸栅,居然都是意外死亡级野,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)阴幌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)勺阐,“玉大人卷中,你說(shuō)我怎么就攤上這事≡ǔ椋” “怎么了蟆豫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)懒闷。 經(jīng)常有香客問(wèn)我十减,道長(zhǎng),這世上最難降的妖魔是什么愤估? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任帮辟,我火速辦了婚禮,結(jié)果婚禮上玩焰,老公的妹妹穿的比我還像新娘由驹。我一直安慰自己,他們只是感情好昔园,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布蔓榄。 她就那樣靜靜地躺著,像睡著了一般默刚。 火紅的嫁衣襯著肌膚如雪甥郑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天荤西,我揣著相機(jī)與錄音澜搅,去河邊找鬼。 笑死邪锌,一個(gè)胖子當(dāng)著我的面吹牛勉躺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播觅丰,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赂蕴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了舶胀?” 一聲冷哼從身側(cè)響起概说,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚣伐,沒(méi)想到半個(gè)月后糖赔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轩端,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年放典,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奋构,死狀恐怖壳影,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弥臼,我是刑警寧澤宴咧,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站径缅,受9級(jí)特大地震影響掺栅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纳猪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一氧卧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氏堤,春花似錦沙绝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至脚祟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間强饮,已是汗流浹背由桌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邮丰,地道東北人行您。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像剪廉,于是被迫代替她去往敵國(guó)和親娃循。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 轉(zhuǎn)載注明出處:http://www.reibang.com/p/a1d3d9693e91 1. 簡(jiǎn)介 與前一篇An...
    王三的貓阿德閱讀 1,902評(píng)論 1 9
  • 什么是serice: Service可由其他應(yīng)用組件啟動(dòng)斗蒋,而且即使用戶(hù)切換到其他應(yīng)用捌斧,服務(wù)仍將在后臺(tái)繼續(xù)運(yùn)行。 此...
    felicia_coder閱讀 474評(píng)論 0 3
  • 前言:本文所寫(xiě)的是博主的個(gè)人見(jiàn)解泉沾,如有錯(cuò)誤或者不恰當(dāng)之處捞蚂,歡迎私信博主,加以改正跷究!原文鏈接姓迅,demo鏈接 Serv...
    PassersHowe閱讀 1,405評(píng)論 0 5
  • 本來(lái)是要研讀領(lǐng)導(dǎo)力部分的,可是看到“壓力”兩個(gè)字,想到近期男朋友說(shuō)他壓力很大丁存,情不自禁地就翻到了壓力部分肩杈。真希望自...
    90ab24c1aab6閱讀 615評(píng)論 0 1
  • 不知道算不算深?lèi)?ài)扩然,但最起碼是喜歡很久,反正我知道喜歡她的時(shí)候编丘,我對(duì)其他的女生有一種曾經(jīng)滄海難為水的感覺(jué)与学,看到女生也...
    仂七閱讀 133評(píng)論 0 0