Android 11 デベロッパー プレビュー 2 が公開されました。ぜひお試しのうえ、フィードバックをお寄せください

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

前のレッスンでは、JobIntentService クラスを作成する方法を説明しました。このレッスンでは、Intent で作業をキューに追加することで JobIntentService をトリガーし、操作を実行する方法について説明します。この Intent には、JobIntentService で処理できるようオプションでデータを追加することができます。

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

作業リクエストを作成して JobIntentService に送信するには、Intent を作成し、enqueueWork() を呼び出して実行キューに追加します。インテントには、JobIntentService で処理できるようオプションで(intent extras 形式で)データを追加できます。インテント作成について詳しくは、インテントとインテント フィルタの「インテントの構築」をご覧ください。

次のコード スニペットは、このプロセスを示しています。

  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()を呼び出すと、JobIntentServiceonHandleWork() メソッドで定義された作業が実行されます。その後、このクラスは自身で停止します。

次に、作業リクエストの結果を、元のアクティビティまたはフラグメントに報告します。次のレッスンでは、BroadcastReceiver を使ってこれを行う方法を説明します。