Android - IntentService使用方法

By JS | Last updated: December 29, 2019

IntentServiceはインテントを渡してサービスのいくつかのタスクを実行するために使用することができます。 ファイルのダウンロードやアップロードなどの処理時間が長いタスクを実行するために使用することができます。 また、インテントのみを転送すればよいので、使いやすいです。

IntentServiceを実装して使用する方法について説明します。

この記事のコードは、kotlinで作成されました。

実装

まず、次のようにIntentServiceを継承するサービスを作成します。

class MyIntentService : IntentService("MyIntentService") {

    companion object {
        const val TAG = "MyIntentService"
    }

    // 1
    override fun onHandleIntent(intent: Intent?) {
        Log.d(TAG, "MSG: ${intent?.getStringExtra("MSG")}")
        for (i in 1..10) {
            Thread.sleep(1000)
            Log.d(TAG, "onHandleIntent() : $i")
        }
    }

    // 2
    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG, "Job execution finished")
    }
}
  1. Intentが渡されると、 onHandleIntent()がcallbackされ、ここJobを実行するように実装することができます。

2.すべてのインテントが処理されると、 onDestroy()が呼び出され、サービスは終了します。

AndroidManifest.xmlは、次のようにServiceを宣言します。

<service android:name=".MyIntentService" />

このようにコードを記述してManifestに登録すると、サービスを利用することができます。

実行

次のようにインテントを実行し、 startService()でサービスを実行することができます。

val intent = Intent(this, MyIntentService::class.java)
intent.putExtra("MSG", "Do something")
startService(intent)

上で述べたように、Intentは onHandleIntent()に渡されます。

上記のコードを実行した結果は次のとおりです。

12-29 21:10:18.029  9734  9782 D MyIntentService: MSG: Do something
12-29 21:10:19.029  9734  9782 D MyIntentService: onHandleIntent() : 1
12-29 21:10:20.029  9734  9782 D MyIntentService: onHandleIntent() : 2
12-29 21:10:21.030  9734  9782 D MyIntentService: onHandleIntent() : 3
12-29 21:10:22.030  9734  9782 D MyIntentService: onHandleIntent() : 4
12-29 21:10:23.030  9734  9782 D MyIntentService: onHandleIntent() : 5
12-29 21:10:24.030  9734  9782 D MyIntentService: onHandleIntent() : 6
12-29 21:10:25.031  9734  9782 D MyIntentService: onHandleIntent() : 7
12-29 21:10:26.031  9734  9782 D MyIntentService: onHandleIntent() : 8
12-29 21:10:27.031  9734  9782 D MyIntentService: onHandleIntent() : 9
12-29 21:10:28.032  9734  9782 D MyIntentService: onHandleIntent() : 10
12-29 21:10:28.037  9734  9734 D MyIntentService: Job execution finished

この記事で使用した例では、GitHubで確認することができます。

注意事項

Android OreoからBackgroundサービス実行を制限します。 IntentServiceがForegroundでのみ実行されたら問題ないが、AppがBackgroundに移行すると、Serviceが中断される可能性があります。 このような問題を回避するために、JobIntentServiceを使用することができます。

参考

Related Posts

codechachaCopyright ©2019 codechacha