バックグラウンド サービスに作業リクエストを送信する

前のレッスンでは、JobIntentService クラスを作成する方法について説明しました。このレッスンでは、Intent を使用して作業をキューに登録することで、JobIntentService をトリガーし、処理を実行する方法について説明します。必要に応じて、この Intent には、JobIntentService が処理するデータを追加することができます。

作業リクエストを作成して JobIntentService に送信する

作業リクエストを作成して JobIntentService に送信するには、Intent を作成し、enqueueWork() を呼び出して、実行用のキューに登録します。必要に応じて、JobIntentService が処理するデータをインテントに追加できます(インテント エクストラの形式で追加します)。インテントの作成方法については、インテントとインテント フィルタの「インテントを作成する」をご覧ください。

このプロセスを下記のコード スニペットに示します。

  1. RSSPullService という名の JobIntentService 用の新しい Intent を作成します。

    Kotlin

        /*
         * Creates a new Intent to start the RSSPullService
         * JobIntentService. Passes a URI in the
         * Intent's "data" field.
         */
        serviceIntent = Intent().apply {
            putExtra("download_url", dataUrl)
        }
        

    Java

        /*
         * Creates a new Intent to start the RSSPullService
         * JobIntentService. Passes a URI in the
         * Intent's "data" field.
         */
        serviceIntent = new Intent();
        serviceIntent.putExtra("download_url", dataUrl));
        
  2. enqueueWork() を呼び出します。

    Kotlin

        private const val RSS_JOB_ID = 1000
        RSSPullService.enqueueWork(context, RSSPullService::class.java, RSS_JOB_ID, serviceIntent)
        

    Java

        // Starts the JobIntentService
        private static final int RSS_JOB_ID = 1000;
        RSSPullService.enqueueWork(getContext(), RSSPullService.class, RSS_JOB_ID, serviceIntent);
        

なお、作業リクエストは、アクティビティまたはフラグメントのどこからでも送信できます。たとえば、最初にユーザー入力を取得する必要がある場合は、ボタンタップや同様のジェスチャーに応答するコールバックからリクエストを送信します。

enqueueWork() を呼び出すと、JobIntentService が、その onHandleWork() メソッド内で定義されている作業を実行します。その後、このクラスは自身で停止します。

次のステップとして、作業リクエストの結果を、元のアクティビティまたはフラグメントに報告します。次のレッスンでは、BroadcastReceiver を使用してこの処理を実行する方法について説明します。