Отправка рабочих запросов в фоновую службу

На предыдущем уроке было показано, как создать класс JobIntentService . В этом уроке показано, как заставить JobIntentService выполнить операцию, поставив работу в очередь с Intent . Это Intent может дополнительно содержать данные для обработки JobIntentService .

Создайте и отправьте рабочий запрос в JobIntentService.

Чтобы создать рабочий запрос и отправить его в JobIntentService , создайте Intent и поставьте его в очередь на выполнение, вызвав enqueueWork() . При желании вы можете добавить данные к намерению (в виде дополнительных элементов намерения) для обработки JobIntentService. Дополнительные сведения о создании намерений см. в разделе «Создание намерений» в разделе «Намерения и фильтры намерений».

Следующие фрагменты кода демонстрируют этот процесс:

  1. Создайте новое Intent для JobIntentService под названием RSSPullService .

    Котлин

    /*
     * 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)
    }
    

    Ява

    /*
     * 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()

    Котлин

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

    Ява

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

Обратите внимание, что вы можете отправить рабочий запрос из любого места действия или фрагмента. Например, если вам нужно сначала получить пользовательский ввод, вы можете отправить запрос из обратного вызова, который реагирует на нажатие кнопки или аналогичный жест.

После вызова enqueueWork() JobIntentService выполняет работу, определенную в методе onHandleWork() , а затем останавливается.

Следующий шаг — сообщить о результатах рабочего запроса исходному действию или фрагменту. В следующем уроке показано, как это сделать с помощью BroadcastReceiver .