iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0

Service是應用程式元件之一,它用於背景處理與使用者介面無關的長時間任務,即便切換到其他應用程式也會繼續執行,例如:訊息通知、資料下載或音樂播放等。

建立Service

  1. File→New→Service→Service

    Untitled

  2. 輸入Service名稱後點選Finish

    Untitled

  3. AS會自動產生Service需要的檔案,AndroidManifest.xml也會自動增加Service的資訊

    Untitled

啟動Service

在Activity中啟動Service,可用intent傳入startService()方法,參數為當前Activity與Service

startService(Intent(this, MyService::class.java))

在Activity中關閉Service,可用intent傳入stopService()方法。

stopService(Intent(this, MyService::class.java))

Service被啟動後執行onCreate(),並呼叫onStartCommand(),當Service需要結束時使用stopSelf(),此時會進入onDestroy()

class MyService : Service() {

    //僅在執行時啟動
    override fun onCreate() {
        super.onCreate()
    }

    //每次啟動都呼叫
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        super.onStartCommand(intent, flags, startId)
        //終止Service,進入Service類別的onDestroy()
        stopSelf()
        return super.onStartCommand(intent, flags, startId)
    }

    override fun onBind(intent: Intent): IBinder?= null
}

onStartCommand()告訴系統如何重啟Service,若執行中的Service收到Activity發出startService()請求,會直接執行onStartCommand(),而不會再次執行onCreate()

onStartCommand()第一個參數intent可接收由Activity啟動時夾帶的資訊,第二個參數flags表示啟動服務的方式,第三個參數為啟動的識別標籤,return須回傳整數,且必須是下列三種之一:

  • START_NOT_STICKY:若Service被終止時則結束服務不再建立。
  • START_STICKY:若Service被終止時,系統會嘗試重啟並再次執行onStartCommand(),但不重傳Iintent資料
  • START_REDELIVER_INTENT:若Service被終止時,系統會嘗試重啟並再次執行onStartCommand(),且重傳Iintent資料

上一篇
Day 23 | 錄音權限
下一篇
Day 25 | BroadcastReceiver 廣播
系列文
社畜轉行之旅,30天Kotlin學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言