service面試題

一.service是什么?

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

二.service的應用場景,以及 和Thread區別

service的定義:看第一條

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

使用場景:

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

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

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

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

那這個時候Service的價值和意義就體現出來了,你可以創建并啟動一個 Service ,在 Service 里面就可以一直創建,運行并控制該 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 已經被升級成了 onStartCommand,不過之前的 onStart 任然有效。這意味著,如果你開發的應用程序用的 sdk 為 2.0 及其以后的版本,那么你應當使用 onStartCommand 而不是onStart。

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

三.開啟service的兩種方式

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

● onCreate

創建服務

● onStart(或onStartCommand)

開始服務

● onDestroy

銷毀服務

● onBind

綁定服務

● onUnbind

解綁服務

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

● startService()

啟動服務

使用startService方式啟動服務。

如果一個Service被某個Activity 使用 startService 方法啟動,那么不管是否有Activity使用bindService綁定或unbindService解除綁定到該Service,該Service都在后臺運行,但它依舊運行于main線程。如果這個Service被startService方法多次啟動,那么onCreate方法只會調用一次,onStart將會被調用多次(對應調用startService的次數),并且系統只會創建Service的一個實例。該Service將會一直在后臺運行,即使啟動它的Activity已經退出,它直到某個activity調用stopService,或自身調用的stopSelf方法才會結束服務。當然如果系統資源不足,android系統也可能結束服務。

● bindService()

綁定服務

使用bindService方式啟動服務。

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

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

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

● stopService()

關閉服務

● unbindService()

解綁服務

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

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