Invia richieste di lavoro al servizio in background

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

crea e invia una richiesta di lavoro a JobIntentService

Per creare una richiesta di lavoro e inviarla a un JobIntentService, crea un Intent e mettilo in coda per l'esecuzione chiamando enqueueWork(). Se vuoi, puoi aggiungere dati all'intent (sotto forma di extra intent) da elaborare da parte di JobIntentService. Per ulteriori informazioni sulla creazione di intent, leggi la sezione Creazione di un intento in Intent e filtri intent.

I seguenti snippet di codice mostrano questa procedura:

  1. Crea un nuovo Intent per il JobIntentService denominato 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 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 di un'attività o di un frammento. Ad esempio, se devi prima ottenere un input dell'utente, puoi inviare la richiesta da un callback che risponde a un clic su un pulsante o a un gesto simile.

Una volta chiamata enqueueWork(), JobIntentService esegue il lavoro definito nel suo onHandleWork() metodo e poi si arresta.

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