Arbeitsanfragen an Hintergrunddienst senden

In der vorherigen Lektion haben Sie gelernt, wie Sie einen JobIntentService-Kurs erstellen. In dieser Lektion erfahren Sie, wie Sie JobIntentService auslösen, um einen Vorgang auszuführen. Dazu stellen Sie Arbeit mit einem Intent in die Warteschlange. Diese Intent kann optional Daten für die Verarbeitung durch die JobIntentService enthalten.

Einen Arbeitsauftrag erstellen und an einen JobIntentService senden

Wenn Sie eine Arbeitsanfrage erstellen und an eine JobIntentService senden möchten, erstellen Sie eine Intent und stellen Sie sie zur Ausführung in die Warteschlange ein, indem Sie enqueueWork() aufrufen. Optional können Sie dem Intent Daten in Form von Intent-Extras hinzufügen, die vom JobIntentService verarbeitet werden sollen. Weitere Informationen zum Erstellen von Intents finden Sie im Abschnitt zum Erstellen eines Intents unter Intents und Intent-Filter.

Die folgenden Code-Snippets veranschaulichen diesen Prozess:

  1. Erstellen Sie einen neuen Intent für den JobIntentService mit dem Namen RSSPullService.

    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()
    anrufen

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

Sie können die Arbeitsanfrage von überall in einer Aktivität oder einem Fragment senden. Wenn du beispielsweise zuerst eine Nutzereingabe abfragen musst, kannst du die Anfrage über einen Callback senden, der auf das Klicken auf eine Schaltfläche oder eine ähnliche Geste reagiert.

Nachdem Sie enqueueWork() aufgerufen haben, führt JobIntentService die in seiner Methode onHandleWork() definierte Arbeit aus und stoppt dann von selbst.

Der nächste Schritt besteht darin, die Ergebnisse der Arbeitsanfrage an die ursprüngliche Aktivität oder das ursprüngliche Fragment zurückzumelden. In der nächsten Lektion erfahren Sie, wie das mit einem BroadcastReceiver funktioniert.