Q:談一談Service的生命周期犬耻?
onCreate()創(chuàng)建服務(wù)煎谍、 onStartCommand()第一次啟動(dòng)服務(wù)坊萝、onBind()綁定服務(wù)、onUnBind()取消服務(wù)綁定句狼、onDestory()停止服務(wù)
Q:Service的兩種啟動(dòng)方式笋熬?區(qū)別在哪?
startService啟動(dòng)服務(wù)后調(diào)用服務(wù)的onStartCommand方法腻菇,如果服務(wù)還沒(méi)創(chuàng)建的話先調(diào)用onCreate()創(chuàng)建服務(wù)胳螟;
bindService綁定服務(wù)后會(huì)調(diào)用服務(wù)的onBind方法,如果沒(méi)有服務(wù)則onCreate()——onBind(),然后activity可以通過(guò)新建一個(gè)ServiceConnection對(duì)象并重寫其ServiceConnected方法接收服務(wù)的onbind()方法回傳的Ibinder對(duì)象實(shí)例筹吐。這樣可以實(shí)現(xiàn)客戶端與服務(wù)端的通信糖耸,知道調(diào)用 unbindService()停止服務(wù)為止。
Q:一個(gè)Activty先start一個(gè)Service后丘薛,再bind時(shí)會(huì)回調(diào)什么方法蔬捷?此時(shí)如何做才能回調(diào)Service的destory()方法?
會(huì)回調(diào)onBind()綁定服務(wù)的方法榔袋,如果想要回調(diào)Service的destory()方法,需要同時(shí)調(diào)用stopService()方法和unBindService()方法
Q:Service如何和Activity進(jìn)行通信铡俐?
1凰兑、通過(guò)bindService(),并通過(guò)onbind()獲取相應(yīng)的Ibinder對(duì)象實(shí)例。
2审丘、通過(guò)廣播吏够,service發(fā)送廣播,在activit一種進(jìn)行接收廣播數(shù)據(jù)滩报。
Q:用過(guò)哪些系統(tǒng)Service锅知?
ActivityManagerService: 系統(tǒng)管理服務(wù)
WindowManager: 窗口管理服務(wù)
LayoutInflater: 獲取xml里面定義的view
AlarmManager:時(shí)鐘服務(wù)
PowerManager: 電源服務(wù)
KeyboadManager: 鍵盤管理服務(wù)
Q:是否能在Service進(jìn)行耗時(shí)操作?如果非要可以怎么做脓钾?
Service 服務(wù)是運(yùn)行在主線程中的售睹,因此不能執(zhí)行耗時(shí)操作;如果非要執(zhí)行耗時(shí)操作可训,可以在服務(wù)中新開(kāi)線程昌妹,如果IntentService就是專門處理耗時(shí)的服務(wù)的捶枢,里面通過(guò)一個(gè)隊(duì)列來(lái)管理每條任務(wù),每條任務(wù)都在自己的子線程中執(zhí)行飞崖,使用IntentService時(shí)烂叔,只需要繼承IntentService,重寫onHandleIntent()就行了
Q:AlarmManager能實(shí)現(xiàn)定時(shí)的原理?
通過(guò)調(diào)用AlarmManager的set()方法就可以設(shè)置定時(shí)任務(wù)固歪,里面又幾個(gè)參數(shù)蒜鸡,PendingIntent 比較重要,這個(gè)就是我們需要廣播的內(nèi)容封裝牢裳。然后通過(guò)廣播接收器onRecive()接收逢防,這樣不斷的啟動(dòng)服務(wù)和廣播接收實(shí)現(xiàn)定時(shí)操作
Q:前臺(tái)服務(wù)是什么?和普通服務(wù)的不同贰健?如何去開(kāi)啟一個(gè)前臺(tái)服務(wù)胞四?
前臺(tái)服務(wù)是用戶看得見(jiàn)的服務(wù),而普通服務(wù)一半默默的在后臺(tái)運(yùn)行伶椿,比如通知欄的通知Notification就是一個(gè)前臺(tái)服務(wù)辜伟,通過(guò)startForeground() 開(kāi)啟一個(gè)前臺(tái)服務(wù)
Q:是否了解ActivityManagerService,談?wù)勊l(fā)揮什么作用脊另?
ActivityManagerService是一個(gè)核心系統(tǒng)服務(wù)导狡,負(fù)責(zé)四大組件的、啟動(dòng)偎痛、調(diào)度旱捧、切換以及進(jìn)程間管理和調(diào)度工作。
Q:如何保證Service不被殺死踩麦?
1枚赡、提升service優(yōu)先級(jí)
2、在activity的onDestory()方法中發(fā)送廣播啟動(dòng)服務(wù)
3谓谦、在onStartCommand()方法中設(shè)置flags值為 START_STICKY贫橙,讓服務(wù)結(jié)束后自動(dòng)重啟