将工作请求发送到后台服务

上一课向您展示了如何创建JobIntentService 类。本课将向您展示如何通过使用Intent 将工作排队来触发JobIntentService 以运行操作。此Intent 可以选择性地包含JobIntentService 要处理的数据。

创建并向 JobIntentService 发送工作请求

要创建工作请求并将其发送到JobIntentService,请创建一个Intent 并将其排队以通过调用 enqueueWork() 来执行。您还可以选择向 Intent(以 Intent 附加数据形式)添加数据以供 JobIntentService 处理。有关创建 Intent 的更多信息,请阅读Intent 和 Intent 过滤器中的构建 Intent 部分。

以下代码段演示了此过程

  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);

请注意,您可以从 Activity 或 Fragment 中的任何位置发送工作请求。例如,如果您需要先获取用户输入,则可以从响应按钮点击或类似手势的回调中发送请求。

调用 enqueueWork() 后, JobIntentService 会在其 onHandleWork() 方法中执行定义的工作,然后自行停止。

下一步是将工作请求的结果报告回原始的 Activity 或 Fragment。下一课将向您展示如何使用BroadcastReceiver来执行此操作。