Il traffico di rete generato da un'app può avere un impatto significativo sulla durata della batteria del dispositivo. Per ottimizzare il traffico, devi misurarlo e identificarne l'origine. Le richieste di rete possono provenire direttamente da un'azione dell'utente, dal codice della tua app o da un server che comunica con l'app.
Questo argomento mostra come monitorare e classificare il traffico di rete e fornisce indicazioni per identificare e risolvere i problemi.
Utilizzare Network Profiler per monitorare le richieste
Utilizza Network Profiler per monitorare le richieste di rete della tua applicazione. Puoi monitorare come e quando la tua app trasferisce i dati e ottimizzare il codice sottostante in modo appropriato.
Monitorando la frequenza dei trasferimenti di dati e la quantità di dati trasferiti durante ogni connessione, puoi identificare le aree della tua applicazione che possono essere ottimizzate per il risparmio energetico. In genere, dovrai cercare picchi brevi che possono essere ritardati.
Per identificare meglio la causa dei picchi di trasferimento, l'API Traffic Stats consente di taggare i trasferimenti di dati che si verificano da una socket all'interno di un determinato thread utilizzando TrafficStats.setThreadStatsTag()
.
La chiamata di questa funzione non tagga automaticamente tutto il traffico per un determinato
thread; i tag devono essere applicati alle socket.
Una volta impostato il tag thread, puoi taggare e annullare il tagging manuale delle singole prese
utilizzando
TrafficStats.tagSocket()
e
TrafficStats.untagSocket()
.
Un tag viene applicato anche se viene aperto un socket nel thread o se un socket del server accetta una connessione.
L'accesso simultaneo allo stesso socket da più thread utilizzerà qualsiasi tag presente nel socket al momento dell'invio o della ricezione dei pacchetti di rete (che potrebbe essere diverso da quando l'utente ha scritto o letto i dati, a causa del buffering e dei ritrasmessi).
Ad esempio, puoi definire costanti per rappresentare diversi tipi di traffico di rete, come mostrato nel seguente esempio di codice:
Kotlin
const val USER_INITIATED = 0x1000 const val APP_INITIATED = 0x2000 const val SERVER_INITIATED = 0x3000
Java
public static final int USER_INITIATED = 0x1000; public static final int APP_INITIATED = 0x2000; public static final int SERVER_INITIATED = 0x3000;
A questo punto puoi taggare le richieste di rete di conseguenza:
Kotlin
TrafficStats.setThreadStatsTag(USER_INITIATED) TrafficStats.tagSocket(outputSocket) // Transfer data using socket TrafficStats.untagSocket(outputSocket)
Java
TrafficStats.setThreadStatsTag(USER_INITIATED); TrafficStats.tagSocket(outputSocket); // Transfer data using socket TrafficStats.untagSocket(outputSocket);
La libreria HttpURLConnection
tagga automaticamente i socket in base al valore di TrafficStats.getThreadStatsTag()
corrente. La libreria inserisce inoltre i tag e i tag nei socket quando vengono riciclati tramite i pool keep-alive, come illustrato nell'esempio di codice riportato di seguito:
Kotlin
class IdentifyTransferSpikeTask { @WorkerThread fun request(url: String) { TrafficStats.setThreadStatsTag(APP_INITIATED) // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag() } }
Java
public class IdentifyTransferSpikeTask { @WorkerThread public void request(String url) { TrafficStats.setThreadStatsTag(APP_INITIATED); // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag(); } }
Analizzare i tipi di traffico di rete
Quando esamini il traffico di rete generato dalla tua app, devi comprendere la fonte del traffico per poterlo ottimizzare di conseguenza. Un'attività di rete frequente generata dalla tua app potrebbe essere del tutto appropriata se risponde alle azioni dell'utente, ma completamente inappropriata se l'app non è in primo piano o se il dispositivo è in tasca o nella borsa.
Analizzare il traffico avviato dall'utente
Il traffico di rete avviato dall'utente può essere raggruppato in modo efficiente mentre un utente esegue un'attività specifica all'interno della tua app o essere distribuito in modo non uniforme man mano che l'utente richiede informazioni aggiuntive di cui la tua app ha bisogno. Lo scopo dell'analisi del traffico di rete avviato dall'utente è cercare modelli di utilizzo frequente della rete nel tempo e tentare di ridurne la frequenza raggruppando le richieste.
L'imprevedibilità delle richieste degli utenti rende difficile ottimizzare questo tipo di utilizzo della rete nella tua app. Inoltre, gli utenti si aspettano risposte rapide quando utilizzano attivamente un'app, quindi ritardare le richieste di efficienza può portare a esperienze utente scadenti. In generale, dovresti dare la priorità a una risposta rapida all'utente rispetto all'utilizzo efficiente della rete mentre un utente interagisce direttamente con la tua app.
Per consigli su come ottimizzare il traffico avviato dagli utenti, consulta Ottimizzare le richieste avviate dall'utente.
Analizzare il traffico avviato dall'app
Il traffico di rete avviato dall'app è in genere un'area in cui puoi avere un impatto significativo sull'utilizzo efficiente della larghezza di banda della rete. Durante l'analisi dell'attività di rete della tua app, cerca periodi di inattività e determina se possono essere aumentati. Se noti schemi di accesso alla rete coerente da parte dell'app, prova a raggruppare questo traffico per consentire al dispositivo radio di tornare alla modalità a basso consumo tra un periodo di attività e l'altro.
Per consigli su come ottimizzare il traffico avviato dall'app, consulta Ottimizzare le richieste avviate dall'app.
Analizzare il traffico avviato dal server
L'attività di rete avviata dai server che comunicano con la tua app è inoltre tipicamente un'area in cui puoi avere un impatto significativo sull'utilizzo efficiente della larghezza di banda della rete. Firebase Cloud Messaging (FCM) è un meccanismo leggero utilizzato per trasmettere dati da un server a una determinata istanza dell'app. Con FCM, il server può notificare all'app in esecuzione su un determinato dispositivo che sono disponibili nuovi dati per il dispositivo.
Per consigli su come ottimizzare il traffico avviato dal server, consulta Richieste di Optimize avviate dal server.
Utilizzo di Storico della batteria per visualizzare gli effetti del traffico di rete
Storico della batteria è uno strumento che visualizza il consumo della batteria di un dispositivo in un determinato periodo di tempo. Puoi utilizzare questo strumento per analizzare in che modo l'attività di rete influisce sul consumo della batteria. Ad esempio, Battery History può mostrarti se la tua app utilizza la radio cellulare più spesso del previsto. Per ulteriori informazioni sull'utilizzo di Battery Historian, consulta Creare un profilo dell'utilizzo della batteria con Batterystats e Battery Historian.