Connettività per miliardi

Oltre la metà degli utenti a livello mondiale sperimenterà la tua app tramite una connessione 2G. Per migliorare l'esperienza, ottimizza le connessioni a bassa velocità e il lavoro offline archiviando dati, accodando le richieste e gestendo le immagini per ottenere prestazioni ottimali.

Qui puoi trovare alcuni suggerimenti su come raggiungere questi obiettivi.

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 per il caricamento delle immagini.

Pubblica immagini WebP

  • Gestisci i file WebP sulla rete per ridurre i tempi di caricamento delle immagini e risparmiare larghezza di banda. Un file WebP ha spesso dimensioni minori rispetto alle controparti PNG e JPG, con almeno la stessa qualità dell'immagine. Anche se utilizzi impostazioni con perdita di dati, WebP è in grado di produrre un'immagine quasi identica all'originale. Android include il supporto WebP con perdita di dati a partire da Android 4.0 (livello API 14: Ice Cream Sandwich) e il supporto per WebP trasparente e senza perdita di dati a partire da Android 4.2 (livello API 17: Jelly Bean).

Ridimensiona le immagini in modo dinamico

  • Fai in modo che le tue app richiedano immagini con le dimensioni di rendering target, in base alla specifica del dispositivo, e che il server fornisca immagini di dimensioni appropriate. In questo modo riduci al minimo i dati inviati tramite la rete e riduci la quantità di memoria necessaria per contenere ogni immagine, migliorando le prestazioni e la soddisfazione degli utenti.
  • L'esperienza utente si riduce quando gli utenti devono attendere il download delle immagini. L'utilizzo di immagini di dimensioni appropriate consente di risolvere questi problemi. Potresti effettuare 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, come i valori precalcolati della tavolozza o le miniature a bassa risoluzione, possono migliorare l'esperienza utente durante il recupero dell'immagine.

Usa le librerie per il caricamento delle immagini

  • L'app non deve recuperare immagini 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 visualizzazioni per mostrare le immagini segnaposto fino a quando le immagini effettive non sono pronte. Poiché le immagini vengono memorizzate nella cache, queste librerie restituiscono la copia locale alla successiva richiesta di un'immagine.
  • Le librerie per il caricamento di immagini gestiscono la loro cache, conservando le immagini più recenti per evitare che lo spazio di archiviazione dell'app aumenti all'infinito.

Ottimizza il networking

Puoi migliorare l'esperienza utente offrendo un'esperienza di rete ottimale. Ad esempio, puoi rendere la tua app utilizzabile offline, utilizzare WorkManager e Room e deduplicare le richieste di rete.

Rendere l'app utilizzabile offline

  • Nelle aree rurali e nelle aree meno agiate, è frequente che i dispositivi perdano la connettività di rete. La creazione di uno stato offline utile significa che gli utenti possono interagire con la tua app in qualsiasi momento. Per farlo, archivia i dati localmente, memorizzali nella cache e accoda le richieste in uscita all'azione quando la connettività viene ripristinata.
  • Se possibile, le app non devono informare gli utenti che la connettività è stata interrotta. È solo quando l'utente esegue un'operazione in cui la connettività è essenziale che deve ricevere una notifica all'utente.
  • Quando un dispositivo non è connesso, l'app deve raggruppare le richieste di rete, per conto dell'utente, che possono essere eseguite al ripristino della connettività. Un esempio di ciò è un client di posta che consente agli utenti di scrivere, inviare, leggere, spostare ed eliminare i messaggi esistenti anche quando il dispositivo è offline. Queste operazioni possono essere memorizzate nella cache ed eseguite quando viene ripristinata la connettività. In questo modo, l'app è in grado di fornire un'esperienza utente simile indipendentemente dal fatto che il dispositivo sia online o offline.

Utilizzare la stanza virtuale per recuperare e memorizzare nella cache i dati

  • Assicurati che la tua app archivi tutti i dati su disco utilizzando un database o una struttura simile in modo che le prestazioni siano ottimali indipendentemente dalle condizioni della rete. Utilizza la libreria di persistenza della stanza per memorizzare nella cache i dati di un database locale e WorkManager per aggiornare la cache quando il dispositivo dispone di 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. Ciò garantisce che l'app funzioni a prescindere dal fatto che il dispositivo sia offline o su una rete lenta o inaffidabile.

Deduplica richieste di rete

  • Inizialmente, un'architettura offline-first tenta di recuperare i dati dallo spazio di archiviazione locale e, in caso contrario, richiede i dati dalla rete. Dopo essere stati recuperati dalla rete, i dati vengono memorizzati nella cache localmente per recuperarli in futuro. Ciò aiuta a garantire che le richieste di rete per gli stessi dati vengano effettuate una sola volta, mentre le richieste successive vengono soddisfatte localmente. A questo scopo, utilizza un database locale per i dati di lunga durata (di solito android.database.sqlite o SharedPreferences).
  • Questa architettura semplifica inoltre il flusso di un'app tra lo stato offline e online, in quanto una parte recupera i dati dalla rete alla cache, mentre l'altro recupera i dati dalla cache da presentare all'utente.
  • Per i dati transitori, utilizza una cache del disco limitata come DiskLruCache. I dati che in genere non cambiano devono essere richiesti una sola volta sulla rete e memorizzati nella cache per uso futuro. Esempi di questi dati sono immagini e documenti non temporali come articoli o post su social.

Ottimizza il trasferimento dei dati

La tua app può adattarsi alle condizioni di rete in diversi modi per offrire un'esperienza utente migliore. Ad esempio, può dare la priorità alle richieste di rete per ridurre al minimo il tempo di attesa dell'utente per le informazioni. È anche in grado di rilevare e adattarsi a velocità di rete inferiori e a modifiche che potrebbero verificarsi nella connessione di rete.

Dai priorità alla larghezza di banda

  • Non devi dare per scontato che qualsiasi rete a cui è connesso il dispositivo sia durevole o affidabile. Per questo motivo, le app devono dare la priorità alle richieste di rete in modo da mostrare all'utente le informazioni più utili il prima possibile.
  • Presentare immediatamente agli utenti informazioni visibili e pertinenti è un'esperienza utente migliore che farli aspettare per informazioni che potrebbero non essere necessarie. Questo riduce il tempo di attesa dell'utente e aumenta l'utilità dell'app sulle reti lente.
  • Per ottenere questo risultato, metti in sequenza le richieste di rete in modo che il testo venga recuperato prima di rich media. Le richieste di testo tendono a essere più piccole, si comprimono meglio e, di conseguenza, vengono trasferite più velocemente, il che significa che la tua app può visualizzare rapidamente contenuti utili. Per ulteriori informazioni sulla gestione delle richieste di rete, consulta il corso di formazione Android sulla gestione dell'utilizzo della rete.

Utilizza meno larghezza di banda per connessioni più lente

  • La capacità dell'app di trasferire i dati in modo tempestivo dipende dalla connessione di rete. Il rilevamento della qualità della rete e la modifica delle relative modalità di utilizzo possono contribuire a offrire un'esperienza utente eccellente.
  • Puoi utilizzare i seguenti metodi per rilevare la qualità della rete sottostante. Utilizzando i dati di questi metodi, la tua app deve personalizzare l'utilizzo della rete per continuare a fornire una risposta tempestiva alle azioni dell'utente:
  • In caso di connessioni più lente, valuta la possibilità di scaricare solo contenuti multimediali a risoluzione più bassa o forse non del tutto. Ciò garantisce che gli utenti possano utilizzare l'app in caso di connessioni lente. Se non disponi di un'immagine o se l'immagine è ancora in fase di caricamento, dovresti sempre mostrare un segnaposto. Puoi creare un segnaposto dinamico utilizzando la Libreria Palette 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 Risparmio dati. Per maggiori informazioni su questa funzionalità, consulta Risparmio dati.

Rileva le modifiche alla rete, quindi modifica il comportamento delle app

  • La qualità della rete non è statica; cambia in base alla località, al traffico di rete e alla densità della popolazione locale. Le app devono rilevare cambiamenti 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:
  • Man mano che la qualità della rete si deteriora, fai lo scale down del numero e delle dimensioni delle richieste. Man mano che la qualità della connessione migliora, puoi fare lo scale up delle richieste a livelli ottimali.
  • Su reti unmetered di qualità superiore, 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 per lettori di notizie recuperano tre articoli alla volta tramite rete 2G, ma venti articoli alla volta tramite Wi-Fi. Per ulteriori informazioni sulla regolazione del comportamento dell'app in base alle modifiche della rete, consulta la formazione su Android sul monitoraggio dello stato della connettività.
  • La trasmissione CONNECTIVITY_CHANGE viene inviata quando si verifica una modifica alla connettività di rete. Quando la tua app è in primo piano, puoi chiamare registerReceiver per ricevere la trasmissione. Dopo aver ricevuto la trasmissione, devi rivalutare lo stato attuale della rete e regolare l'utilizzo dell'interfaccia utente e della rete in modo appropriato. Non devi dichiarare questo ricevitore nel file manifest, poiché non è disponibile in Android 7.0 (livello API 24) e versioni successive. Per ulteriori informazioni su questa e altre modifiche di Android 7.0, consulta la pagina Modifiche relative ad Android 7.0.

Risorse aggiuntive

Per ulteriori informazioni sul supporto di diverse velocità di connessione, consulta la seguente risorsa:

Post del blog