Invia richieste di lavoro al servizio in background

La lezione precedente ha mostrato come creare un corso JobIntentService. Questa lezione illustra come attivare JobIntentService per eseguire un'operazione accodando il lavoro con un Intent. Questa Intent può facoltativamente contenere dati che deve essere elaborata dalla JobIntentService.

Crea e invia una richiesta di lavoro a un JobIntentService

Per creare una richiesta di lavoro e inviarla a un JobIntentService, crea un elemento Intent e accodalo per l'esecuzione chiamando enqueueWork(). Facoltativamente, puoi aggiungere dati all'intent (sotto forma di extra di intent) in modo che JobIntentService li elabori. Per saperne di più sulla creazione di intent, consulta la sezione Creazione di un intent in Intent e filtri di intent

I seguenti snippet di codice illustrano questa procedura:

  1. Crea un nuovo Intent per JobIntentService chiamato 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. Chiama il numero 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);
    

Tieni presente che puoi inviare la richiesta di lavoro da qualsiasi punto in un'attività o un frammento. Ad esempio, se devi prima ottenere l'input dell'utente, puoi inviare la richiesta da un callback che risponde al clic su un pulsante o a un gesto simile.

Dopo aver chiamato enqueueWork(), JobIntentService esegue l'operazione definita nel metodo onHandleWork() e poi si interrompe automaticamente.

Il passaggio successivo consiste nel segnalare i risultati della richiesta di lavoro all'attività o al frammento di origine. La prossima lezione spiega come eseguire questa operazione con un BroadcastReceiver.