問題:什么是service
先說答案:
在 Android 中促王,服務(Service)是一個用來執(zhí)行后臺操作而不提供用戶界面的應用組件。
服務可以執(zhí)行長時間運行的操作拣度,并且即使用戶切換到其他應用程序碎绎,它仍然可以運行。
服務通常用于處理網(wǎng)絡事務抗果、播放音樂筋帖、執(zhí)行文件 I/O、與內(nèi)容提供者互動等任務冤馏。
服務的類型:
前臺服務(Foreground Service):
執(zhí)行對用戶明顯的操作日麸,如音樂播放。前臺服務必須提供一個通知逮光,即時在后臺運行代箭,用戶也能看到。
后臺服務(Background Service):
執(zhí)行用戶不直接注意到的操作涕刚。從 Android Oreo 開始嗡综,后臺服務的使用受到了限制,以減少對系統(tǒng)性能的影響副女。
綁定服務(Bound Service):
通過綁定組件(如活動)執(zhí)行與客戶端的交互蛤高。綁定服務提供了一個客戶端-服務器接口蚣旱,允許組件與服務進行交互,發(fā)送請求戴陡,獲取結(jié)果塞绿,甚至是跨進程通信(IPC)。
Service的生命周期:
onCreate():
當服務第一次被創(chuàng)建時調(diào)用恤批。
這是進行一次性設置的地方异吻,不應該在onCreate()中啟動耗時的任務。
onStartCommand():
每次通過startService()方法啟動服務時都會調(diào)用喜庞。
這是啟動執(zhí)行任務的地方诀浪,如果有耗時操作,應在這里創(chuàng)建新線程延都。
此方法返回一個標志雷猪,指示系統(tǒng)在服務被殺死后如何繼續(xù)服務。
onBind():
當其他組件(如Activity)通過bindService()方法與服務綁定時調(diào)用晰房。
應返回一個IBinder對象求摇,客戶端可以通過它與服務進行通信。
Service可以沒有綁定功能殊者,那么這個方法可以返回null与境。
onUnbind():
當所有客戶端解除與服務的綁定時調(diào)用。
如果你想允許重新綁定猖吴,可以通過返回true摔刁。
onRebind():
當新的客戶端連接到已經(jīng)斷開連接的服務時調(diào)用,但僅在onUnbind()返回true時調(diào)用海蔽。
onDestroy():
當服務不再有用并即將被銷毀時調(diào)用共屈。
這是清理資源的地方,如停止線程准潭、注銷廣播接收器等趁俊。
注意:
使用startService()啟動的服務必須由你自己調(diào)用stopSelf()或stopService()來停止。
與服務綁定的組件(通過bindService())可以調(diào)用unbindService()來解除綁定刑然,當所有組件都解除綁定時,服務也將被銷毀暇务。