(三)高级篇____1、数据传输时避免浪费电量——基于连接类型更改下载方式
原文地址:http://docs.eoeandroid.com/training/efficient-downloads/connectivity_patterns.html 翻译:tyutNo4
更新:2012.07.24
基于网络连接类型更改下载模式
并不是所有的网络连接类型对电量的消耗都是相同的,不只是Wi-Fi模式要比wireless模式大幅减少电量消耗,就算都是wireless模式,不同的制式对电量的消耗也是不同的,比如2G&3G,cdma&wcdma。
Wi-Fi模式
在大多数情况下用Wi-Fi模式下载会获得更大的带宽同时消耗更低的电量。因此,你应该尽可能的在Wi-Fi模式下进行数据传输,不管是上传还是下载。
您可以使用一个广播接收器(broadcast receiver )来监听网络连接类型的变化,当切换到Wi-Fi模式的时候,你就可以进行大量的下载、定时更新、甚至是暂时增加定期更新的频率。具体请参考 Optimizing Battery Life教程中的Determining and Monitoring the Connectivity Status。
使用更大的带宽来下载更多的数据,而不是更频繁的下载
当网络连接为wireless模式的时候,更高的带宽带来的是更高的电量消耗,这意味着LTE(“准4G”技术)通常会比3G消耗更多的电量,跟2G相比消耗的电量更是数倍。
尽管未来的无线电设备都是基于不同的无线电技术,一般来说tail-time状态切换(网络制式的切换?)比更高的带宽模式对电量消耗的影响更大。
同时,更高的带宽意味着在同一时间你可以更好的预览、下载更多的数据。也许上述不是那么直观,因为tail-time电量消耗太高了,所以在每次数据传输的时候尽可能的保持当前连接模式不改变,更不要频繁的切换模式,这样比减少更新频率更有效。
例如:如果LTE无线电的带宽与电量消耗都是3G无线电的2倍,我们应该在每次会话的时候都下载4倍于3G的数据量,或者是差不多10Mb。当然,下载这么多数据的时候,我们需要好好考虑使用本地缓存来预览的效率并且需要经常清理预览缓存(prefetch cache )。
您可以使用连接管理器(connectivity manager )来判断当前激活的无线模式,并且根据你的设定规则进行修改:
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; }

浙公网安备 33010602011771号