Android里面的Service種類以及啟動(dòng)方式
一句話總結(jié):
Service 是 Android 的“后臺(tái)打工人”,分兩種類型(前臺(tái)和后臺(tái)),兩種啟動(dòng)方式(自己干、和人合作干),不同場(chǎng)景用不同姿勢(shì)。
一、Service 的兩種類型:
1. 前臺(tái)服務(wù)(必須亮身份牌)
特點(diǎn):必須顯示一個(gè)常駐通知(像外賣小哥穿著工服),告訴用戶“我正在后臺(tái)干活”,避免被系統(tǒng)干掉。
適用場(chǎng)景:
- 音樂播放(顯示播放通知)。
- 文件下載(顯示進(jìn)度條)。
- 定位跟蹤(如導(dǎo)航)。
代碼示例:
val notification = buildNotification() // 創(chuàng)建通知 startForeground(1, notification) // 變成前臺(tái)服務(wù)
2. 后臺(tái)服務(wù)(偷偷干活,但容易被抓)
特點(diǎn):沒有通知,默默干活,但 Android 8.0 之后限制嚴(yán)格(長(zhǎng)時(shí)間后臺(tái)運(yùn)行會(huì)被系統(tǒng)限制)。
適用場(chǎng)景:
- 臨時(shí)任務(wù)(如數(shù)據(jù)同步)。
- 輕量任務(wù)(如定時(shí)提醒)。
注意:高版本 Android 中,后臺(tái)服務(wù)可能無法長(zhǎng)期存活,建議改用
WorkManager或JobScheduler。
二、Service 的兩種啟動(dòng)方式:
1. 獨(dú)立干活(startService)
特點(diǎn):
- 通過
startService()啟動(dòng),Service 會(huì)一直運(yùn)行,直到主動(dòng)調(diào)用stopSelf()或其他組件調(diào)用stopService()。 - 生命周期:
onCreate()→onStartCommand()→ (運(yùn)行中) →onDestroy()。
- 通過
適用場(chǎng)景:
- 需要長(zhǎng)期運(yùn)行的任務(wù)(如播放音樂)。
- 不依賴其他組件的獨(dú)立任務(wù)。
代碼示例:
// 啟動(dòng)服務(wù) val intent = Intent(this, MyService::class.java) startService(intent) // 停止服務(wù) stopService(intent)
2. 和人合作干(bindService)
特點(diǎn):
- 通過
bindService()啟動(dòng),Service 和組件(如 Activity)綁定,綁定解除后 Service 可能被銷毀。 - 生命周期:
onCreate()→onBind()→ (運(yùn)行中) →onUnbind()→onDestroy()。 - 可以通過
IBinder接口實(shí)現(xiàn)組件和 Service 的雙向通信(比如控制音樂播放進(jìn)度)。
- 通過
適用場(chǎng)景:
- 需要與界面交互的任務(wù)(如控制下載進(jìn)度)。
- 多個(gè)組件共享同一個(gè) Service。
代碼示例:
// 綁定服務(wù)
val connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, binder: IBinder?) {
// 獲取 Service 的接口,進(jìn)行交互
}
override fun onServiceDisconnected(name: ComponentName?) {}
}
bindService(intent, connection, Context.BIND_AUTO_CREATE)
// 解綁服務(wù)
unbindService(connection)
三、混合模式(start + bind)
特點(diǎn):
- 先
startService()讓 Service 長(zhǎng)期運(yùn)行,再bindService()進(jìn)行交互。 - 適用場(chǎng)景:音樂播放器(長(zhǎng)期播放 + 界面控制進(jìn)度)。
- 先
銷毀條件:必須同時(shí)調(diào)用
stopService()和unbindService()才會(huì)銷毀。
四、IntentService(已過時(shí),但要知道)
特點(diǎn):
- 自帶工作線程,任務(wù)按順序執(zhí)行,干完活自動(dòng)關(guān)閉。
- Android 8.0 后受限,推薦改用
WorkManager或JobIntentService。
代碼示例:
class MyIntentService : IntentService("MyIntentService") {
override fun onHandleIntent(intent: Intent?) {
// 在子線程執(zhí)行耗時(shí)任務(wù)
}
}
五、如何選擇啟動(dòng)方式?
| 場(chǎng)景 | 啟動(dòng)方式 | 類型 |
|---|---|---|
| 長(zhǎng)期任務(wù)(如音樂播放) | startService() | 前臺(tái)服務(wù) |
| 臨時(shí)交互(如下載控制) | bindService() | 綁定服務(wù) |
| 輕量后臺(tái)任務(wù)(如數(shù)據(jù)同步) | WorkManager | 后臺(tái)服務(wù)替代 |
總結(jié)
前臺(tái)服務(wù):要亮通知,適合用戶感知的任務(wù)。
后臺(tái)服務(wù):盡量少用,高版本 Android 限制多。
啟動(dòng)方式:
- 獨(dú)立干:用
startService(),記得關(guān)。 - 合作干:用
bindService(),綁定完記得解。
- 獨(dú)立干:用
口訣:
- “長(zhǎng)期亮牌用前臺(tái),臨時(shí)合作用綁定,高版本別硬杠,WorkManager 更穩(wěn)當(dāng)” 。
以上就是Android里面的Service種類以及啟動(dòng)方式的詳細(xì)內(nèi)容,更多關(guān)于Android Service種類及啟動(dòng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is inco
這篇文章主要介紹了解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is incompatible (supported only in IntelliJ IDEA)的問題 ,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-12-12
Android編程實(shí)現(xiàn)泡泡聊天界面實(shí)例詳解(附源碼)
這篇文章主要介紹了Android編程實(shí)現(xiàn)泡泡聊天界面,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android泡泡聊天界面的窗體定義與功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android studio2.3.3升級(jí)到3.1.2坑(小記)
這篇文章主要介紹了Android studio2.3.3升級(jí)3.1.2坑(小記),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
Android 5.0+ 屏幕錄制實(shí)現(xiàn)的示例代碼
這篇文章主要介紹了Android 5.0+ 屏幕錄制實(shí)現(xiàn)的示例代碼,從 5.0 開始,系統(tǒng)提供給了 app 錄制屏幕的一系列方法,不需要 root 權(quán)限,只需要用戶授權(quán)即可錄屏,相對(duì)來說較為簡(jiǎn)單,感興趣的小伙伴們可以參考一下2018-05-05
Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解
這篇文章主要介紹了Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android Usb設(shè)備的監(jiān)聽(Dev)外設(shè)端口的判定以及耳機(jī)的插拔
今天小編就為大家分享一篇關(guān)于Android Usb設(shè)備的監(jiān)聽(Dev)外設(shè)端口的判定以及耳機(jī)的插拔,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Android利用MPAndroidChart繪制曲線圖表的基礎(chǔ)教程
最近在項(xiàng)目中要用到曲線圖,于是在網(wǎng)上找了很多很多,有AChartengine,MPAndroidChart,helloChart等等,我還用過基于html5的jsChart來做過,不過最終還是選擇了MPAndroidChart來做本文介紹了Android利用MPAndroidChart繪制曲線圖表的基礎(chǔ)教程,需要的朋友可以參考下。2018-03-03

