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

前のレッスンでは、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 を使用してこれを行う方法を説明します。