【Android Developers Training】 86. 基于连接

系统 1616 0

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接: http://developer.android.com/training/efficient-downloads/connectivity_patterns.html


不同连接类型对于电池寿命的影响是不一样的。首先使用Wi-Fi会比使用无线网络(比如GPRS)消耗的电量小的多。而且不同的通信技术对于电量的影响也是有很大差异的。


一). 使用Wi-Fi

在大多数情况下一个Wi-Fi连接会提供更大的带框而消耗的电量却更低。所以说你必须尽量通过Wi-Fi来连接数据。

你可以使用一个广播接收器来监听连接状态的变化。当建立了Wi-Fi连接后,执行大量的数据下载,计划更新,甚至临时性地增加计划更新的频率。具体的细节可以阅读 Optimizing Battery Life 课中的 Determining and Monitoring the Connectivity Status


二). 使用更大的带宽,在更低的频率下去下载更多的数据

当用无线电连接时,更大的带宽通常意味着更多的电量消耗。所以这就意味着LTE会比3G消耗更多的电量,也比2G的价钱更高。

这意味着虽然底层的无线电状态机会随着实现的技术不同而不同,但通常来说,更大带宽的无线电技术意味着在状态切换时间阶段对电池的影响也会更大。

同时,更高的带宽意味着你可以预取更多的数据,在同一时间段内下载更多的数据。不太直观地说,因为尾时间的电池消耗相对而言要更高,所以不如对每一个传输数据的会话,保持无线电在活跃的状态从而减少更新的频率,这样可能会效率更高一些。

例如,如果一个LTE网络和3G网络相比具有2倍的带宽和2倍的能量消耗,你应该在每一个会话下载4倍的数据——大约是10mb的数据。当下载了这么多数据后,还需要考虑预取对于本地存储的影响,并且定期刷新你的预取缓存。

你可以使用 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
      
      
        ;

}
      
    

【Android Developers Training】 86. 基于连接类型修改您的下载模式


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论