Quando se trata de afetar a duração da bateria, nem todos os tipos de conexão são criados da mesma forma. Além do rádio Wi-Fi consumir significativamente menos bateria do que os rádios sem fio equivalentes, os rádios usados em diferentes tecnologias sem fio têm implicações diferentes na bateria.
Usar Wi-Fi
Na maioria dos casos, um rádio Wi-Fi oferece maior largura de banda com um custo de bateria significativamente menor. Como resultado, sempre que possível tente realizar transferências de dados quando o dispositivo estiver conectado por Wi-Fi.
Você pode usar um broadcast receiver para ouvir as mudanças de conectividade que indicam quando uma conexão Wi-Fi foi estabelecida para executar downloads significativos, forçar atualizações programadas e, possivelmente, aumentar mesmo que temporariamente a frequência de atualizações regulares, como descrito na lição Determine o status de conectividade e tipo de conexão.
Usar uma maior largura de banda para fazer o download de mais dados com menos frequência
Quando o dispositivo está conectado por um rádio sem fio, uma largura de banda maior geralmente tem um maior custo de bateria. Isso significa que o LTE normalmente consome mais energia que o 3G, que tem um custo maior que o 2G.
Assim, embora a máquina de estado de rádio subjacente varie de acordo com a tecnologia de rádio, de maneira geral, o impacto relativo na bateria causado pelo tempo de cauda da mudança de estado é maior para rádios com largura de banda mais alta.
Ao mesmo tempo, a maior largura de banda permite uma pré-busca mais agressiva, fazendo o download de mais dados de uma só vez. Talvez menos intuitivamente, porque o custo da bateria no tempo de cauda é relativamente maior, e também é mais eficiente manter o rádio ativo por períodos mais longos durante cada sessão de transferência para reduzir a frequência das atualizações.
Por exemplo, se um rádio LTE tiver o dobro da largura de banda e o dobro do custo de energia do 3G, você precisará fazer o download de quatro vezes mais dados durante cada sessão, ou até 10 MB. Ao fazer o download de tantos dados, é importante considerar o efeito da pré-busca no armazenamento local disponível e limpar o cache de pré-busca regularmente.
Você pode usar o gerenciador de conectividade para determinar o rádio sem fio ativo e modificar suas rotinas de pré-busca conforme necessário:
Kotlin
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager val activeNetwork: NetworkInfo? = cm.activeNetworkInfo val prefetchCacheSize: Int = when (activeNetwork?.type) { ConnectivityManager.TYPE_WIFI -> MAX_PREFETCH_CACHE ConnectivityManager.TYPE_MOBILE -> { when (tm.networkType) { TelephonyManager.NETWORK_TYPE_LTE or TelephonyManager.NETWORK_TYPE_HSPAP -> DEFAULT_PREFETCH_CACHE * 4 TelephonyManager.NETWORK_TYPE_EDGE or TelephonyManager.NETWORK_TYPE_GPRS -> DEFAULT_PREFETCH_CACHE / 2 else -> DEFAULT_PREFETCH_CACHE } } else -> DEFAULT_PREFETCH_CACHE }
Java
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); int PrefetchCacheSize = DEFAULT_PREFETCH_CACHE; switch (activeNetwork.getType()) { case (ConnectivityManager.TYPE_WIFI): PrefetchCacheSize = MAX_PREFETCH_CACHE; break; case (ConnectivityManager.TYPE_MOBILE): { switch (tm.getNetworkType()) { case (TelephonyManager.NETWORK_TYPE_LTE | TelephonyManager.NETWORK_TYPE_HSPAP): PrefetchCacheSize *= 4; break; case (TelephonyManager.NETWORK_TYPE_EDGE | TelephonyManager.NETWORK_TYPE_GPRS): PrefetchCacheSize /= 2; break; default: break; } break; } default: break; }