O tráfego de rede gerado por um app pode ter um impacto significativo na duração da bateria do dispositivo. Para otimizar esse tráfego, você precisa 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 fornece orientações sobre como identificar e resolver problemas.
Usar o Network Profiler para monitorar solicitações
Use o Network Profiler para rastrear as solicitações de rede do seu aplicativo. É possível monitorar como e quando seu app transfere dados e otimiza o código de forma adequada.
Ao monitorar a frequência das suas transferências de dados e a quantidade de dados transferidos durante cada conexão, é possível identificar áreas do app que podem ser mais eficientes em termos de bateria. Geralmente, você procura picos curtos que podem atrasar.
Para identificar melhor a causa dos picos de transferência, a API Traffic Stats permite
marcar 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 da linha de execução for definida, será possível marcar e desmarcar manualmente soquetes individuais
usando
TrafficStats.tagSocket()
e
TrafficStats.untagSocket()
.
Uma tag também será aplicada se um soquete for aberto na linha de execução ou se um soquete de servidor
aceitar uma conexão.
O acesso simultâneo ao mesmo soquete por várias linhas de execução usará a tag do soquete quando os pacotes de rede foram enviados ou recebidos. Essa tag pode ser diferente de quando o usuário gravou ou leu os dados devido ao armazenamento em buffer e retransmissões.
Por exemplo, você pode definir constantes para representar diferentes tipos de tráfego de rede, conforme mostrado no exemplo de código a seguir:
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;
Em seguida, você pode marcar suas solicitações de rede adequadamente:
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
TrafficStats.getThreadStatsTag()
atual. A biblioteca também marca e desmarca os soquetes quando é reciclada por meio de pools de sinal de atividade, conforme mostrado neste exemplo de código:
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 otimizá-lo corretamente. A atividade frequente de rede gerada pelo app pode ser totalmente adequada se estiver respondendo a ações do usuário, mas completamente inapropriada se o app não estiver em 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 maneira desigual à medida que o usuário solicita mais informações que o app precisa coletar. Seu objetivo ao analisar o tráfego de rede iniciado pelo usuário é procurar 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 vez do uso eficiente da rede enquanto o usuário interage diretamente com o app.
Para recomendações para otimizar o tráfego iniciado pelo usuário, consulte Otimizar solicitações iniciadas pelo usuário.
Analisar o tráfego iniciado pelo app
Normalmente, o tráfego de rede iniciado pelo app é uma área em que pode ter um impacto significativo sobre o uso eficiente da largura de banda da rede. Ao analisar a atividade de rede do seu app, procure períodos de inatividade e determine se eles podem ser aumentados. Se você vir padrões de acesso consistente à 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 conferir recomendações para 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, o servidor pode notificar seu app em execução em um dispositivo específico de que há novos dados disponíveis para ele.
Para conferir recomendações para otimizar o tráfego iniciado pelo servidor, consulte Otimizar solicitações iniciadas pelo servidor.
Usar o Battery Historian para conferir os efeitos do tráfego de rede
O Battery Historian é uma ferramenta que visualiza o consumo de bateria de um dispositivo ao longo de um período. Você pode usar essa ferramenta para analisar como sua atividade de rede afeta o consumo da 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 saber mais sobre como usar o Battery Historian, consulte Criar perfil de uso da bateria com o Batterystats e o Battery Historian.