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 dei dati in background

Questa sezione descrive alcune situazioni comuni in cui le app devono trasferire dati da o verso il 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 che gestisce questo trasferimento?
  • Il lavoro deve essere eseguito immediatamente?
Opzione Quando si usa Tempistiche Esempi

WorkManager

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

Differibile: può essere modificato anche in base ai vincoli

Immediato: utilizza setExpedited se il lavoro deve essere eseguito immediatamente

Sincronizzazione periodica dei dati con un server

Download o caricamento di contenuti multimediali mentre si è connessi alla rete Avviato in background (non dall'utente)

User-Initiated Data Transfer Job

Quando il trasferimento dei dati viene attivato dall'utente e devi tenerlo informato 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.

Inizia immediatamente

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

Utilizzalo se ne esiste uno per quella particolare operazione. Può offrire vantaggi come prestazioni ottimizzate e una migliore integrazione del sistema.

Varia

Sincronizzazione dei dati con un dispositivo connesso

Se il tuo scenario non è elencato tra quelli comuni, consulta le sezioni seguenti per trovare l'API più adatta al tuo caso d'uso. È probabile che WorkManager sia la soluzione più adatta.

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

Se la tua app deve trasferire dati a un server remoto, ti consigliamo di utilizzare un job di trasferimento di dati avviato dall'utente. Questo tipo di lavoro è appropriato se si verifica quanto segue:

  • L'utente ha iniziato il trasferimento dei dati
  • Devi tenere l'utente aggiornato sullo stato di avanzamento del trasferimento dei dati
  • Se il sistema interrompe il trasferimento, l'esperienza utente ne risente.

Se una di queste condizioni non è soddisfatta, devi 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, ti consigliamo di utilizzare il tipo di processo di trasferimento di dati avviato dall'utente. D'altra parte, se l'utente vuole che la playlist scaricata venga aggiornata periodicamente in background senza che l'utente intervenga, WorkManager è una scelta migliore.

Per ulteriori informazioni, incluso come creare ed eseguire 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 essere interrotte o posticipate 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 dei dati in background:

  • Se devi eseguire il lavoro il prima possibile, puoi pianificare una richiesta di lavoro urgente. Questa opzione è particolarmente utile se stai pianificando il lavoro in risposta a una trasmissione, a un allarme esatto o a un messaggio FCM ad alta priorità.
  • Se devi eseguire il lavoro periodicamente, puoi pianificare un 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 di diverse app per bilanciare le richieste sul dispositivo.
  • Devi definire i vincoli di lavoro per specificare le circostanze giuste per l'esecuzione del job. Ad esempio, se la tua app deve scaricare risorse non urgenti, puoi specificare che il job deve essere eseguito mentre il dispositivo è in carica e connesso a una rete non a consumo. WorkManager può quindi eseguire il job in un momento che bilancia il carico sul sistema.
  • WorkManager è libero di annullare e riprovare un job, se necessario. Ad esempio, l'utente potrebbe spegnere il dispositivo mentre è in esecuzione un job; il sistema può quindi riprovare 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 nuovo tentativo funzioni correttamente.
  • Worker a esecuzione prolungata (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 in primo piano e dei job, incluse le limitazioni all'avvio in background e i limiti di esecuzione (i job che richiedono più di 10 minuti verranno riprogrammati dal sistema).

JobScheduler è un'opzione alternativa per la pianificazione del lavoro in background. A differenza 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 Companion Device Manager); altrimenti, utilizza un connectedDeviceservizio 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?

Utilizzo dei prompt AI

I prompt AI sono pensati per essere utilizzati in Gemini in Android Studio.

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

Utilizzare un tipo di servizio in primo piano più specifico

Se WorkManager e JobScheduler non sono adatti a una determinata attività in background, potrebbe essere necessario utilizzare un servizio in primo piano.

Come sempre, quando valuti l'utilizzo di un servizio in primo piano, devi valutare se esiste un'API alternativa più adatta al tuo caso d'uso.

Utilizzare un servizio in primo piano di breve durata

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

  • L'utente avvia un'azione (come 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 servizio in primo piano connectedDevice. Di seguito sono riportate alcune situazioni comuni in cui potresti doverlo fare:

  • Comunicare con un accessorio Bluetooth, come cuffie o uno smartwatch
  • Trasferimento di dati a un dispositivo connesso localmente tramite connessione USB, NFC o connessione internet locale

Tuttavia, in queste situazioni, potresti riuscire a connetterti al dispositivo utilizzando Companion Device Manager anziché un servizio in primo piano. Come sempre, se è disponibile un'API per scopi speciali per il tuo caso d'uso, di solito è una scelta migliore rispetto all'utilizzo di un servizio in primo piano.

Utilizzare il nuovo servizio in primo piano di elaborazione dei contenuti multimediali

Se devi elaborare dati multimediali, puoi utilizzare il servizio in primo piano mediaProcessing. 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 a un altro per la riproduzione. Per maggiori informazioni, consulta la documentazione del servizio di elaborazione multimediale in primo piano.

Risorse aggiuntive