Opzioni dell'attività di trasferimento di dati in background

Molte app devono trasferire dati in background. Questa guida illustra le opzioni per un trasferimento affidabile dei dati in background e fornisce esempi di come implementarle.

Scenari comuni di trasferimento di dati in background

Questa sezione descrive alcune situazioni comuni in cui le app devono trasferire dati verso o dal dispositivo e ti aiuta a scegliere lo strumento giusto per la tua situazione.

Quando scegli tra le API, devi considerare le seguenti domande:

  • Il trasferimento è stato avviato dall'utente?
  • Esiste un'API esistente che gestisce questo trasferimento?
  • Il lavoro deve essere eseguito immediatamente?
Opzione Quando si usa Tempistiche Esempi

WorkManager

Per pianificare attività con una durata inferiore a 10 minuti che devono essere eseguite quando l'app non è visibile.

Posticipabile: può essere regolato anche in base ai vincoli

Immediato: utilizza setExpedited se il lavoro deve essere eseguito immediatamente

Sincronizzare periodicamente i dati con un server

Download o caricamento di contenuti multimediali mentre sei sulla rete Avvio in background (non dall'utente)

Job di trasferimento dati avviato dall'utente

Quando il trasferimento dei dati viene attivato dall'utente e devi informarlo sullo stato di avanzamento del trasferimento.

Avviato dall'utente (ad es. clic sul pulsante): inizia immediatamente

Caricamento di una foto, download di un file

Servizio in primo piano

Per attività brevi e critiche o quando WorkManager non è un'opzione. Una notifica informa l'utente dell'avanzamento del trasferimento.

Avvio immediato

connectedDevice: sincronizzazione dei dati con un dispositivo connesso

shortService: elaborazione dei file in meno di 3 minuti

mediaProcessing: codifica o decodifica di un file multimediale

API specifica

Da utilizzare se ne esiste uno per la particolare operazione. Può offrire vantaggi come prestazioni ottimizzate e integrazione del sistema migliorata.

Varia

Sincronizzazione dei dati con un dispositivo connesso

Se il tuo scenario non è elencato tra gli scenari comuni, consulta le seguenti sezioni per trovare l'API più appropriata per il tuo caso d'uso. È probabile che WorkManager sia appropriato.

Utilizzare il tipo di processo di trasferimento di dati avviato dall'utente

Se la tua app deve trasferire dati a un server remoto, ti consigliamo di utilizzare un processo di trasferimento di dati avviato dall'utente. Questo tipo di lavoro è appropriato se è valida la seguente condizione:

  • L'utente ha iniziato il trasferimento dei dati
  • Devi mantenere l'utente al corrente dell'avanzamento del trasferimento dei dati
  • È dannoso per l'esperienza utente se il sistema interrompe il trasferimento

Se una di queste condizioni non è soddisfatta, ti consigliamo di utilizzare WorkManager.

Ad esempio, un'app multimediale potrebbe consentire agli utenti di scaricare album da riprodurre localmente. Se un utente vuole scaricare una playlist e riprodurla immediatamente, puoi utilizzare il tipo di job di trasferimento di dati avviato dall'utente. D'altra parte, se l'utente vuole che la playlist scaricata venga aggiornata periodicamente in background senza iniziativa da parte sua, WorkManager sarebbe una scelta migliore.

Per ulteriori informazioni, inclusa la creazione e l'esecuzione di un processo di trasferimento di dati avviato dall'utente, consulta la documentazione sui processi di trasferimento di dati avviati dall'utente.

Utilizzare WorkManager per il trasferimento dei dati

Nella maggior parte dei casi, WorkManager è l'opzione migliore quando devi pianificare il lavoro. Tieni presente che devi progettare le attività in modo che possano essereinterrotte o differite dal sistema. Per saperne di più, consulta la documentazione di WorkManager.

Di seguito sono riportati alcuni aspetti da tenere presente quando utilizzi WorkManager per il trasferimento di dati in background:

  • Se devi eseguire il lavoro il prima possibile, puoi pianificare una richiesta di lavoro accelerata. Questa opzione è particolarmente utile se scheduli il lavoro in risposta a una trasmissione, a una sveglia esatta o a un messaggio FCM ad alta priorità.
  • Se devi eseguire il lavoro periodicamente, puoi pianificare il lavoro periodico. Una richiesta di lavoro periodica ti consente di specificare approssimativamente la frequenza con cui verrà eseguito il lavoro, ma non garantisce un orario specifico. In questo modo, il sistema può pianificare le richieste di lavoro da diverse app per bilanciare le richieste sul dispositivo.
  • Devi definire vincoli di lavoro per specificare le circostanze giuste per eseguire il job. Ad esempio, se la tua app deve scaricare risorse non urgenti, puoi specificare che il job debba essere eseguito mentre il dispositivo è in carica e connesso a una rete senza limiti di traffico. WorkManager può quindi eseguire il job in un momento in cui il carico sul sistema è bilanciato.
  • WorkManager è libero di annullare e riprovare un job, se necessario. Ad esempio, l'utente potrebbe spegnere il dispositivo durante l'esecuzione di un job. Il sistema può quindi ritentare il job quando il dispositivo è di nuovo disponibile. Assicurati di progettare e testare il flusso di lavoro per assicurarti che il ciclo di annullamento e riprova funzioni correttamente.
  • Worker a lungo termine (servizio in primo piano):WorkManager può supportare il lavoro che richiede più di 10 minuti creando un servizio in primo piano per la tua app. Ciò significa che è soggetto alle stesse limitazioni di un servizio e di job in primo piano, incluse le limitazioni relative all'avvio in background e ai limiti di esecuzione (i job che richiedono più di 10 minuti verranno riprogrammati dal sistema).

JobScheduler è un'opzione alternativa per pianificare il lavoro in background. Al contrario di WorkManager, richiede una maggiore configurazione, ma come vantaggio, hai accesso ad API non attualmente disponibili in WorkManager, come setPrefetch, setUserInitiated e getPendingJobReasons.

Utilizzare un'API specifica

Utilizza un'API specifica, se disponibile (ad esempio il gestore dei dispositivi companion); in caso contrario, utilizza un servizio connectedDevice in primo piano.

Identificare le API specifiche per caso d'uso

Questo prompt richiede API specifiche per le attività di trasferimento dei dati.


I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?

Utilizzare i prompt di IA

I prompt AI sono destinati all'utilizzo in Gemini in Android Studio (è obbligatoria la versione Canary più recente)

Scopri di più su Gemini in Studio qui: https://developer.android.com/studio/preview/gemini

Utilizza un tipo di servizio in primo piano più specifico

Se WorkManager e JobScheduler non sono appropriati per la determinata attività in background, potrebbe essere necessario utilizzare un servizio in primo piano.

Come sempre, quando valuti la possibilità di utilizzare un servizio in primo piano, devi valutare se esiste un'API alternativa migliore adatta al tuo caso d'uso.

Utilizzare un servizio in primo piano di servizio breve

Se la tua app deve eseguire un'attività breve e fondamentale, un shortService servizio in primo piano potrebbe essere l'opzione migliore. Ecco alcune situazioni in cui un shortService servizio in primo piano potrebbe essere appropriato:

  • L'utente avvia un'azione (ad esempio la sincronizzazione dei dati con il server) e vuoi assicurarti che l'operazione venga completata anche se l'utente invia immediatamente l'app in background.
  • Salvataggio delle informazioni in memoria in uno spazio di archiviazione permanente.
  • Crittografia o decrittografia delle informazioni.

Per informazioni complete, consulta la documentazione di shortService.

Utilizzare un servizio in primo piano del dispositivo connesso

Se devi trasferire dati su un altro dispositivo locale, ti consigliamo di utilizzare un connectedDevice servizio in primo piano. Di seguito sono riportate alcune situazioni comuni in cui potresti dover eseguire questa operazione:

  • Comunicazione con un accessorio Bluetooth, ad esempio cuffie o smartwatch
  • Trasferimento di dati a un dispositivo connesso localmente tramite una connessione USB, NFC o una connessione internet locale

Tuttavia, in queste situazioni, potresti essere in grado di utilizzare il gestore del dispositivo companion per connetterti al dispositivo anziché utilizzare un servizio in primo piano. Come sempre, se per il tuo caso d'uso è disponibile un'API per scopi speciali, di solito è una scelta migliore rispetto all'utilizzo di un servizio in primo piano.

Utilizzare il nuovo servizio in primo piano per l'elaborazione dei contenuti multimediali

Se devi elaborare dati multimediali, puoi utilizzare il mediaProcessing servizio in primo piano. Questo tipo di servizio è disponibile se la tua app ha come target Android 15 o versioni successive. Ad esempio, questo tipo di servizio è appropriato se la tua app deve transcodificare i contenuti multimediali da un formato all'altro per la riproduzione. Per maggiori informazioni, consulta la documentazione del servizio in primo piano per l'elaborazione di contenuti multimediali.

Risorse aggiuntive