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 |
---|---|---|---|
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
|
Sincronizzare periodicamente i dati con un server Download o caricamento di contenuti multimediali mentre sei sulla rete Avvio in background (non 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 |
|
Per attività brevi e critiche o quando WorkManager non è un'opzione. Una notifica informa l'utente dell'avanzamento del trasferimento. |
Avvio immediato |
|
|
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.
Prompt AI
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?
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.