service面試題

一.service是什么?

service是一個服務,是一種可以在后臺執(zhí)行長時間運行操作而沒有用戶界面的應用組件,可以用activity和broadcast啟動,service只要啟動就會在后臺一直運行,哪怕啟動他的activity已經(jīng)被銷毀也不會受影響,當然也可以綁定activity可以與ACitivy進行通訊,service是運行在主線程中,不能做耗時操作

二.service的應用場景,以及 和Thread區(qū)別

service的定義:看第一條

thread的定義:Thread 是程序執(zhí)行的最小單元,它是分配CPU的基本單位捷绒∩兀可以用 Thread 來執(zhí)行一些異步的操作。而Thread分為main線程和子線程倦始。我們通常做的費時操作都會放到子線程中,而和UI刷新的功能都放到了main線程中。

使用場景:

由以上定義可見意狠,兩者并沒有什么關系悲酷。先說一下為什么會有Service這個組件套菜,為什么會有它和Thread自身缺點有關系,因為只使用Thread無法解決問題设易。我們知道他們兩個都是在后臺執(zhí)行任務逗柴,都沒有界面。

我們在使用Thread啟動一個子線程來干一些費時的操作時顿肺,這個子線程一般是由Activity來啟動執(zhí)行的(假如說沒有Service組件)戏溺,而Thread子線程 的運行是獨立于 Activity 的,那么當一個 Activity 被 finish 之后屠尊,如果你沒有主動停止 Thread 或者 Thread 里的 run 方法沒有執(zhí)行完畢的話旷祸,Thread 并不會結束,它會一直執(zhí)行下去讼昆。因此這里會出現(xiàn)一個問題:當 Activity 被 finish 之后托享,你不再持有該 Thread 的引用,你就無法對其進行控制浸赫。

另一方面闰围,你也沒有辦法在不同的 Activity 中對同一Thread 進行控制。

舉個例子:如果你的 Thread 需要不停地過一段時間就要連接服務器一次做某種同步既峡,該 Thread 需要在 Activity 退出后也在運行羡榴。這個時候你就沒有辦法在您啟動的 Activity 里面控制之前Activity創(chuàng)建的 Thread,這樣這個子線程就相當于一個“野線程”了运敢,你無法對其進行狀態(tài)監(jiān)聽和控制校仑。

那這個時候Service的價值和意義就體現(xiàn)出來了忠售,你可以創(chuàng)建并啟動一個 Service ,在 Service 里面就可以一直創(chuàng)建迄沫,運行并控制該 Thread了稻扬,不用擔心Service退出之后無法再控制Thread,因為Service會一直運行在后臺邢滑,它沒有Activity的界面腐螟,不會“顯式”的退出。這樣便解決了上面使用Thread存在的問題困后。

由以上說明乐纸,你應該清楚了他們的各自職責,以及使用場景了摇予。

注意事項:

在使用Service時也有很多坑需要我們留意汽绢。

(1)、在調用 bindService 綁定到Service的時候侧戴,應當保證退出時調用 unbindService 解除綁定宁昭,這是一個好的習慣,有始有終酗宋。盡管 Activity 被 finish 的時候綁定會自動解除积仗,并且Service會自動停止;

(2)蜕猫、應當注意使用 startService 啟動服務之后寂曹,一定要使用 stopService停止服務,不管你是否使用bindService回右;

(3)隆圆、同時使用 startService 與 bindService 要注意到,Service 的終止翔烁,需要unbindService與stopService同時調用渺氧,才能終止 Service,不管 startService 與 bindService 的調用順序蹬屹,如果先調用 unbindService 此時服務不會自動終止侣背,再調用 stopService 之后服務才會停止,如果先調用 stopService 此時服務也不會終止慨默,而再調用 unbindService 或者之前調用 bindService 的 Context 不存在(如Activity 被 finish 的時候)后服務才會自動停止秃踩;

(4)、在 sdk 2.0 及其以后的版本中业筏,對應的 onStart 已經(jīng)被升級成了 onStartCommand,不過之前的 onStart 任然有效鸟赫。這意味著蒜胖,如果你開發(fā)的應用程序用的 sdk 為 2.0 及其以后的版本消别,那么你應當使用 onStartCommand 而不是onStart。

(5)台谢、你也可以在 Service 里注冊 BroadcastReceiver寻狂,在其他地方通過發(fā)送 broadcast 來控制它,這些是 Thread 做不到的朋沮。

三.開啟service的兩種方式

它的生命周期包含如下方法蛇券,

● onCreate

創(chuàng)建服務

● onStart(或onStartCommand)

開始服務

● onDestroy

銷毀服務

● onBind

綁定服務

● onUnbind

解綁服務

啟動或者綁定服務對應的方法有,

● startService()

啟動服務

使用startService方式啟動服務樊拓。

如果一個Service被某個Activity 使用 startService 方法啟動纠亚,那么不管是否有Activity使用bindService綁定或unbindService解除綁定到該Service,該Service都在后臺運行筋夏,但它依舊運行于main線程蒂胞。如果這個Service被startService方法多次啟動,那么onCreate方法只會調用一次条篷,onStart將會被調用多次(對應調用startService的次數(shù))骗随,并且系統(tǒng)只會創(chuàng)建Service的一個實例。該Service將會一直在后臺運行赴叹,即使啟動它的Activity已經(jīng)退出鸿染,它直到某個activity調用stopService,或自身調用的stopSelf方法才會結束服務乞巧。當然如果系統(tǒng)資源不足涨椒,android系統(tǒng)也可能結束服務。

● bindService()

綁定服務

使用bindService方式啟動服務摊欠。

如果一個Service被某個Activity 調用 bindService 方法綁定啟動丢烘,不管調用 bindService 調用幾次,onCreate方法都只會調用一次些椒,同時onStart方法不會被調用播瞳。當連接建立之后,Service將會一直運行免糕,除非調用unbindService 方法斷開連接或者之前調用bindService 的 Context 不存在了(如Activity被finish的時候)赢乓,系統(tǒng)才會自動停止Service,對應onDestroy將被調用石窑。

還有一中復雜用法牌芋,就是同時使用startService和bindService方式啟動服務战授。如果一個Service又被啟動又被綁定扁凛,則該Service將會一直在后臺運行。并且不管如何調用蹈集,onCreate始終只會調用一次经宏,對應startService調用多少次犀暑,Service的onStart便會調用多少次驯击。調用unbindService將不會停止Service,而必須由外界的activity調用 stopService 或 Service自身調用stopSelf 來停止服務耐亏。

另外徊都,還有停止服務和解除綁定服務的方法,

● stopService()

關閉服務

● unbindService()

解綁服務

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末广辰,一起剝皮案震驚了整個濱河市暇矫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌择吊,老刑警劉巖李根,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異干发,居然都是意外死亡朱巨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門枉长,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冀续,“玉大人,你說我怎么就攤上這事必峰『樘疲” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵吼蚁,是天一觀的道長凭需。 經(jīng)常有香客問我,道長肝匆,這世上最難降的妖魔是什么粒蜈? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮旗国,結果婚禮上枯怖,老公的妹妹穿的比我還像新娘。我一直安慰自己能曾,他們只是感情好度硝,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寿冕,像睡著了一般蕊程。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驼唱,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天藻茂,我揣著相機與錄音,去河邊找鬼。 笑死捌治,一個胖子當著我的面吹牛岗钩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肖油,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼臂港!你這毒婦竟也來了森枪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤审孽,失蹤者是張志新(化名)和其女友劉穎县袱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佑力,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡式散,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了打颤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暴拄。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖编饺,靈堂內(nèi)的尸體忽然破棺而出乖篷,到底是詐尸還是另有隱情,我是刑警寧澤透且,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布撕蔼,位于F島的核電站,受9級特大地震影響秽誊,放射性物質發(fā)生泄漏鲸沮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一锅论、第九天 我趴在偏房一處隱蔽的房頂上張望讼溺。 院中可真熱鬧,春花似錦棍厌、人聲如沸肾胯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敬肚。三九已至,卻和暖如春束析,著一層夾襖步出監(jiān)牢的瞬間艳馒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弄慰,地道東北人第美。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像陆爽,于是被迫代替她去往敵國和親什往。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

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

  • 【Android Service】 Service 簡介(★★★) 很多情況下慌闭,一些與用戶很少需要產(chǎn)生交互的應用程...
    Rtia閱讀 3,160評論 1 21
  • 版權聲明:本文為博主原創(chuàng)文章驴剔,未經(jīng)博主允許不得轉載 PS:轉載請注明出處作者: TigerChain地址: htt...
    TigerChain閱讀 755評論 0 3
  • 2018年Android 面試題 IT開發(fā)仔2018-03-21 15:26:46 在這“金三銀四”的季節(jié)省古,我準備...
    王培921223閱讀 2,529評論 3 24
  • 2018年周檢視 5月第三周|爾聰 5月第三周(5.13~5.19) 一、健康 1.早睡早起 :早睡:00:00前...
    jackhot閱讀 250評論 0 2
  • 【廈門本島】 第一站丧失,騎行白鷺洲 早起五點半豺妓,廈門屬于你 換乘中轉123 第二站, A旅拍鼓浪嶼 B旅拍華新路 換...
    陳穩(wěn)閱讀 170評論 0 0