O tráfego de rede gerado por um app pode ter um impacto significativo sobre a duração da bateria do dispositivo. Para otimizar esse tráfego, é necessário medi-lo e identificar a origem dele. As solicitações de rede podem vir diretamente de uma ação do usuário, do código do seu app ou de um servidor que se comunica com o app.
Neste tópico, mostramos como monitorar e categorizar o tráfego de rede e fornecemos orientações sobre como identificar e resolver problemas.
Usar o Network Profiler para monitorar solicitações
Use o Network Profiler para acompanhar as solicitações de rede do aplicativo. Você pode monitorar como e quando o app transfere dados e otimiza o código subjacente de forma adequada.
Ao monitorar a frequência das suas transferências de dados e a quantidade de dados transferidos durante cada conexão, você pode identificar áreas do app que podem ser mais eficientes em termos de bateria. Geralmente, você procura picos curtos que podem sofrer atrasos.
Para identificar melhor a causa dos picos de transferência, a API Traffic Stats permite
que você marque as transferências de dados que ocorrem de um soquete em uma determinada linha de execução
usando
TrafficStats.setThreadStatsTag()
.
Chamar essa função não marca automaticamente todo o tráfego de uma linha de execução
específica. As tags precisam ser aplicadas aos soquetes.
Depois que a tag de linha de execução for definida, você poderá marcar e remover a marcação de soquetes individuais manualmente
usando
TrafficStats.tagSocket()
e
TrafficStats.untagSocket()
.
Uma tag também é aplicada se um soquete é aberto na linha de execução ou se um soquete do servidor
aceita uma conexão.
O acesso simultâneo ao mesmo soquete por várias linhas de execução vai usar a tag que o soquete tinha quando os pacotes de rede foram enviados ou recebidos (que pode ser diferente do momento em que o usuário gravou ou leu os dados, devido ao armazenamento em buffer e às retransmissões).
Por exemplo, você pode definir constantes para representar diferentes tipos de tráfego de rede, conforme mostrado neste exemplo de código:
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;
Você pode marcar suas solicitações de rede da seguinte maneira:
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);
A biblioteca HttpURLConnection
marca automaticamente os soquetes com base no valor
atual de TrafficStats.getThreadStatsTag()
. A biblioteca também marca e desmarca os soquetes quando é reciclada por meio de
pools com sinal de atividade, conforme mostrado no exemplo de código abaixo:
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(); } }
Analisar tipos de tráfego de rede
Ao analisar o tráfego de rede gerado pelo app, é preciso entender a origem do tráfego para poder otimizá-lo corretamente. A atividade de rede frequente gerada pelo app poderá ser totalmente correta se estiver respondendo a ações do usuário, mas completamente incorreta se o app não estiver no primeiro plano ou se o dispositivo estiver dentro do bolso ou da mochila.
Analisar o tráfego iniciado pelo usuário
O tráfego de rede iniciado pelo usuário pode ser agrupado de forma eficiente enquanto um usuário realiza uma tarefa específica no app ou distribuído de forma desigual enquanto o usuário solicita mais informações que seu app precisa disponibilizar. Sua meta ao analisar o tráfego de rede iniciado pelo usuário é observar padrões de uso frequente da rede ao longo do tempo e tentar diminuir a frequência agrupando as solicitações.
A imprevisibilidade das solicitações do usuário dificulta a otimização desse tipo de uso de rede no app. Além disso, os usuários esperam respostas rápidas quando estão usando um app. Portanto, atrasar as solicitações para aumentar a eficiência pode gerar experiências insatisfatórias. Em geral, priorize uma resposta rápida em detrimento do uso eficiente da rede enquanto o usuário interage diretamente com o app.
Para ver recomendações de otimização do tráfego iniciado pelo usuário, consulte Otimizar solicitações iniciadas pelo usuário.
Analisar o tráfego iniciado pelo app
O tráfego de rede iniciado pelo app é normalmente uma área em que você pode ter um impacto significativo sobre o uso eficiente da largura de banda da rede. Ao analisar a atividade de rede do app, procure períodos de inatividade e determine se eles podem ser aumentados. Se você notar padrões de acesso persistente à rede do app, tente agrupar esse tráfego para permitir que o rádio do dispositivo volte para o modo de baixo consumo de energia entre os períodos de atividade.
Para recomendações sobre como otimizar o tráfego iniciado pelo app, consulte Otimizar solicitações iniciadas pelo app.
Analisar o tráfego iniciado pelo servidor
A atividade de rede iniciada por servidores que se comunicam com o app também costuma ser uma área em que pode haver um impacto significativo sobre o uso eficiente da largura de banda da rede. O Firebase Cloud Messaging (FCM) é um mecanismo leve usado para transmitir dados de um servidor para uma instância de app específica. Usando o FCM, seu servidor pode notificar o app em execução em um dispositivo específico de que há novos dados disponíveis para ele.
Para recomendações sobre como otimizar o tráfego iniciado pelo servidor, consulte Otimizar solicitações iniciadas pelo servidor.
Usar o Battery Historian para visualizar os efeitos do tráfego de rede
O Battery Historian é uma ferramenta que mostra o consumo de bateria de um dispositivo em um período. Use essa ferramenta para analisar como a atividade de rede afeta o consumo de bateria. Por exemplo, o Battery Historian pode mostrar se o app está usando o rádio celular com mais frequência do que o esperado. Para mais informações sobre o uso do Battery Historian, consulte Criar um perfil de uso da bateria com o Batterystats e o Battery Historian.