Connettività per miliardi di utenti

Più della metà di tutti gli utenti in tutto il mondo sperimenterà la tua app tramite una connessione 2G. Per migliorare la loro esperienza, ottimizza le connessioni a bassa velocità e il funzionamento offline archiviando i dati, accodando le richieste e gestendo le immagini per ottenere prestazioni ottimali.

Qui puoi trovare alcuni suggerimenti su come eseguire queste operazioni.

Ottimizza immagini

Esistono diversi modi per semplificare il download delle immagini. Questi includono la pubblicazione di immagini WebP, il dimensionamento dinamico delle immagini e l'utilizzo di librerie di caricamento delle immagini.

Pubblicare immagini WebP

  • Pubblica i file WebP sulla rete per ridurre i tempi di caricamento delle immagini e risparmiare larghezza di banda. Le dimensioni dei file WebP sono spesso inferiori a quelle dei file PNG e JPG, con almeno la stessa qualità delle immagini. Anche utilizzando le impostazioni con perdita di dati, WebP può produrre un'immagine quasi identica all'originale. Android include il supporto WebP con perdita da Android 4.0 (livello API 14: Ice Cream Sandwich) e il supporto per WebP senza perdita di dati e trasparente da Android 4.2 (livello API 17: Jelly Bean).

Immagine con dimensioni dinamiche

  • Fai in modo che le app chiedano immagini con dimensioni di rendering target, in base alle specifiche del dispositivo, e che il server fornisca immagini di dimensioni adeguate. Questo riduce al minimo i dati inviati sulla rete e riduce la quantità di memoria necessaria per contenere ogni immagine, migliorando le prestazioni e la soddisfazione degli utenti.
  • L'esperienza utente diminuisce quando gli utenti devono attendere il download delle immagini. L'utilizzo di dimensioni di immagine adeguate consente di risolvere questi problemi. Potresti inviare richieste di dimensioni delle immagini in base al tipo o alla qualità della rete. queste dimensioni potrebbero essere inferiori a quelle di rendering target.
  • I segnaposto dinamici, ad esempio i valori delle tavolozze precalcolati o le miniature a bassa risoluzione, possono migliorare l'esperienza utente durante il recupero dell'immagine.

Usa le librerie di caricamento delle immagini

  • L'app non dovrebbe recuperare alcuna immagine più di una volta. Le librerie di caricamento delle immagini, come Glide e Picasso, recuperano l'immagine, la memorizzano nella cache e forniscono hook nelle tue visualizzazioni per mostrare immagini segnaposto fino a quando sono pronte. Poiché le immagini vengono memorizzate nella cache, queste librerie restituiscono la copia locale alla successiva richiesta di un'immagine.
  • Le librerie di caricamento delle immagini gestiscono la cache, conservando le immagini più recenti in modo che lo spazio di archiviazione dell'app non aumenti a tempo indeterminato.

Ottimizza il networking

Puoi migliorare l'esperienza utente fornendo un'esperienza di rete ottimale. ad esempio per rendere l'app utilizzabile offline, utilizzare WorkManager e Stanza e deduplicare le richieste di rete.

Rendi la tua app utilizzabile offline

  • Nella zona rurale e in zone meno favorevoli è comune che i dispositivi perdano la connettività di rete. Creare uno stato offline utile significa che gli utenti possono interagire con la tua app in qualsiasi momento. A questo scopo, archivia i dati localmente, memorizza i contenuti nella cache e accoda le richieste in uscita all'azione quando viene ripristinata la connettività.
  • Quando possibile, le app non devono avvisare gli utenti della perdita di connettività. Solo quando l'utente esegue un'operazione in cui la connettività è essenziale, è necessario inviargli una notifica.
  • Se un dispositivo non ha connettività, l'app deve raggruppare le richieste di rete, per conto dell'utente, che possono essere eseguite quando viene ripristinata la connettività. Questo è un esempio di client di posta che consente agli utenti di scrivere, inviare, leggere, spostare ed eliminare le email esistenti anche quando il dispositivo è offline. Queste operazioni possono essere memorizzate nella cache ed eseguite al ripristino della connettività. In questo modo, l'app è in grado di offrire un'esperienza utente simile sia online che offline.

Usa la stanza virtuale per recuperare i dati e memorizzarli nella cache

  • Assicurati che la tua app archivi tutti i dati su disco utilizzando un database o una struttura simile in modo che abbia prestazioni ottimali indipendentemente dalle condizioni della rete. Utilizza la libreria di persistenza della stanza per memorizzare i dati nella cache in un database locale e utilizza WorkManager per aggiornare la cache quando il dispositivo ha una connessione di rete ,
  • Le app devono memorizzare nella cache i contenuti recuperati dalla rete. Prima di effettuare richieste successive, le app devono mostrare i dati memorizzati nella cache locale. Questo assicura che l'app sia funzionale a prescindere dal fatto che il dispositivo sia offline o su una rete lenta o inaffidabile.

Richieste di rete deduplicate

  • Inizialmente un'architettura offline-first cerca di recuperare i dati dallo spazio di archiviazione locale e, in caso contrario, richiede i dati alla rete. Dopo essere stati recuperati dalla rete, i dati vengono memorizzati nella cache in locale per il recupero futuro. Ciò contribuisce a garantire che le richieste di rete per lo stesso dato avvengano una sola volta, con le richieste successive soddisfatte a livello locale. Per raggiungere questo obiettivo, usa un database locale per i dati di lunga durata (di solito android.database.sqlite o SharedPreferences).
  • Questa architettura semplifica anche il flusso di un'app tra gli stati offline e online quando un lato recupera la rete dalla cache, mentre l'altro recupera i dati dalla cache per presentarli all'utente.
  • Per i dati transitori, utilizza una cache del disco limitata come DiskLruCache. I dati che di solito non cambiano devono essere richiesti soltanto una volta nella rete e memorizzati nella cache per uso futuro. Esempi di tali dati sono immagini e documenti non temporali come articoli di notizie o post social.

Ottimizza il trasferimento di dati

Esistono diversi modi in cui la tua app può adattarsi alle condizioni della rete per offrire un'esperienza utente migliore. Ad esempio, può dare priorità alle richieste di rete per ridurre al minimo il tempo di attesa delle informazioni da parte dell'utente. È inoltre in grado di rilevare e adattarsi a velocità e modifiche della rete più lente che potrebbero verificarsi nella connessione di rete.

Dai la priorità alla larghezza di banda

  • Non dovresti presumere che qualsiasi rete a cui il dispositivo sia connesso sia di lunga durata o affidabile. Per questo motivo, le app devono dare la priorità alle richieste di rete in modo da mostrare il prima possibile le informazioni più utili all'utente.
  • Presentare immediatamente agli utenti informazioni visibili e pertinenti è un'esperienza utente migliore rispetto a dover aspettare le informazioni che potrebbero non essere necessarie. Questo riduce il tempo di attesa dell'utente e aumenta l'utilità dell'app sulle reti lente.
  • Per raggiungere questo obiettivo, ordina la rete in modo che il testo venga recuperato prima del rich media. Le richieste di testo tendono a essere più piccole, a comprimersi meglio e quindi a essere trasferite più rapidamente, il che significa che la tua app può mostrare contenuti utili rapidamente. Per scoprire di più sulla gestione delle richieste di rete, visita il corso di formazione Android su Gestione dell'utilizzo della rete.

Utilizza meno larghezza di banda in caso di connessione più lenta

  • La possibilità della tua app di trasferire i dati in modo tempestivo dipende dalla connessione di rete. Rilevare la qualità della rete e regolarne la modalità di utilizzo può contribuire a offrire un'esperienza utente eccellente.
  • Puoi utilizzare i seguenti metodi per rilevare la qualità della rete sottostante. Utilizzando i dati provenienti da questi metodi, la tua app deve personalizzare l'utilizzo della rete per continuare a fornire una risposta tempestiva alle azioni degli utenti:
  • In caso di connessione più lenta, considera la possibilità di scaricare solo contenuti multimediali a risoluzione inferiore o forse nessuna connessione. Questo garantisce che gli utenti possano utilizzare l'app con connessioni lente. Se non hai un'immagine o l'immagine è ancora in fase di caricamento, dovresti sempre mostrare un segnaposto. Puoi creare un segnaposto dinamico utilizzando la libreria delle tavolozze per generare colori segnaposto corrispondenti all'immagine di destinazione.
  • Sui dispositivi con Android 7.0 (livello API 24) e versioni successive, gli utenti possono attivare l'impostazione Risparmio dati, che aiuta a ridurre al minimo l'utilizzo dei dati. Android 7.0 estende ConnectivityManager per rilevare le impostazioni di Risparmio dati. Per maggiori informazioni su questa funzionalità, consulta la pagina Risparmio dati.

Rileva le modifiche alla rete e poi cambia il comportamento delle app

  • La qualità della rete non è statica; cambia in base alla località, al traffico di rete e alla densità di popolazione locale. Le app dovrebbero rilevare le modifiche nella rete e regolare la larghezza di banda di conseguenza. In questo modo, l'app può personalizzare l'esperienza utente in base alla qualità della rete. Rileva lo stato della rete utilizzando questi metodi:
  • Con il degrado della qualità della rete, riduci il numero e le dimensioni delle richieste. Man mano che la qualità della connessione migliora, puoi fare lo scale up delle richieste fino a raggiungere i livelli ottimali.
  • Sulle reti di qualità superiore, non a consumo, valuta la possibilità di precaricare i dati per renderli disponibili in anticipo. Dal punto di vista dell'esperienza utente, ciò potrebbe significare che le app di lettori di notizie recuperano tre articoli alla volta su una rete 2G, ma recuperano venti articoli alla volta su una rete Wi-Fi. Per ulteriori informazioni sulla regolazione del comportamento delle app in base alle modifiche della rete, consulta il corso di formazione Android su Monitoraggio dello stato della connettività.
  • La trasmissione CONNECTIVITY_CHANGE viene inviata quando si verifica un cambiamento nella connettività di rete. Quando l'app è in primo piano, puoi chiamare registerReceiver per ricevere questa trasmissione. Dopo aver ricevuto la trasmissione, devi rivalutare lo stato attuale della rete e regolare l'utilizzo della UI e della rete in modo appropriato. Non devi dichiarare questo ricevitore nel file manifest, in quanto non è disponibile in Android 7.0 (livello API 24) e versioni successive. Per ulteriori informazioni su questa e altre modifiche in Android 7.0, consulta la pagina Modifiche ad Android 7.0.

Risorse aggiuntive

Per scoprire di più sul supporto di diverse velocità di connessione, consulta la seguente risorsa:

Post del blog