將工作要求傳送給背景服務

上一堂課將說明如何建立 JobIntentService 類別。本課程說明如何使用 Intent 將工作排入佇列,觸發 JobIntentService 執行作業。這個 Intent 可以選擇包含 JobIntentService 要處理的資料。

建立工作要求並傳送至 JobIntentService

如要建立工作要求並傳送至 JobIntentService,請建立 Intent,然後呼叫 enqueueWork() 將其加入佇列以便執行。您可以選擇將資料新增至意圖 (以意圖額外項目的形式),讓 JobIntentService 進行處理。如要進一步瞭解如何建立意圖,請參閱「意圖和意圖篩選器」中的「建立意圖」一節

以下程式碼片段示範這個程序:

  1. JobIntentService 建立名為 RSSPullService 的新 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 執行這項操作。