转载自: http://blog.csdn.net/kesenhoo/article/details/7396321

Modifying your Download Patterns Based on the Connectivity Type

[根据连接的网络类型来更改下载模式]

  • 并不是所有的网络类型(Wi-Fi,3G,2G,etc)对电量的消耗是同等的。不仅仅Wi-Fi电波比无线电波消耗的电量要少很多,而且不同的无线电波(3G,2G,LTE……)也存在使用不同电量的区别。

Use Wi-Fi [使用Wi-Fi]

  • 在大多数情况下,Wi-Fi电波会在使用相对较低的电量的情况下提供一个相对较宽的带宽。因此,我们需要努力争取尽量使用Wi-Fi来传递数据。
  • 我们可以使用Broadcast Receiver来监听当网络连接切换为Wi-Fi,这个时候我们可以进行大量的数据传递操作,例如下载,执行定时的更新操作,甚至是在这个时候加大更新的频率。这些内容都可以在前面的课程中找到。

Use Greater Bandwidth to Download More Data Less Often [使用更大的带宽来下载更多的数据,而不是经常去下载]

  • 当通过无线电进行连接的时候,更高的带宽通常伴随着更多的电量消耗。这意味这LTE(一种4G网络制式)会比3G制式消耗更多,当然比起2G,那就更是如此。
  • 从Lesson 1我们知道了无线电状态机是怎么回事,通常来说相对更宽的带宽网络制式会有更长的状态切换时间(也就是从full power过渡到standby有一段时间的延迟)。
  • 同时,更宽的带宽意味这可以更贪婪的进行prefetch,下载更多的数据。也许这个说法不是很直观,因为过渡时间比较长,而过渡时间的长短我们无法控制,也就是过渡时间的电量消耗差不多是固定了,既然这样,我们在每次传输会话中为了减少更新的频率而把无线电激活的时间拉长,这样显的更有效率。
  • 例如:如果LTE无线电的带宽与电量消耗都是3G无线电的2倍,我们应该在每次会话的时候都下载4倍于3G的数据量,或者是差不多10Mb(前面文章有说明3G一般每次下载2Mb)。当然,下载到这么多数据的时候,我们需要好好考虑prefetch本地存储的效率并且需要经常刷新预取的cache。
  • 我们可以使用connectivity manager来判断当前激活的无线电波,并且根据不同结果来修改prefetch操作。
  1. 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;
    }

后记:想要最大化效率与最小化电量的消耗,需要考虑的东西太多了,通常来说,会根据app的功能需求来选择有所侧重,那么前提就是需要了解到底哪些对效率的影响比较大,这有利于我们做出最优选择。

学习自:http://developer.android.com/training/efficient-downloads/connectivity_patterns.html

转载请注明出处:http://blog.csdn.net/kesenhoo,谢谢!

[Android Traffic] 根据网络类型更改下载模式的更多相关文章

  1. android网络类型之2G-3G切换

    在android手机‘设置’-‘移动网络类型’里可以看到有关网络类型的选项,一般默认为3G优先. 如果有需要在程序中切换网络类型的朋友,不妨试试下面的方法.这里提供了几种思路,虽然可能对待 手机的方式 ...

  2. Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

    本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1). ...

  3. 【Java/Android性能优 6】Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化

    本文转自:http://www.trinea.cn/android/android-imagesdcardcache/ 本文主要介绍一个支持图片自动预取.支持多种缓存算法.支持数据保存和恢复的图片Sd ...

  4. 【Java/Android性能优5】 Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

    本文转自:http://www.trinea.cn/android/android-imagecache/ 主要介绍一个支持图片自动预取.支持多种缓存算法.支持二级缓存.支持数据保存和恢复的图片缓存的 ...

  5. Android开发之从网络URL上下载JSON数据

    网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...

  6. Android实现网络多线程断点续传下载(转)

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  7. Android 判断当前网络连接类型

    实际应用开发时,如果存在需要用户获取大量数据的情况,最好是先判断下网络类型,提示用户当前的网络类型,是否需要连接Wifi,etc.(手机流量太贵啦,当然土豪是无视这玩意的, (/ □ \)). 定义网 ...

  8. Android实现网络多线程断点续传下载

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  9. Android判断用户的网络类型(2/3/4G、wifi)

    很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑.但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下. 一加手机一代,移动4G 网络,得到的subtype类型值为17 ...

随机推荐

  1. 【bzoj3747】[POI2015]Kinoman 线段树区间合并

    题目描述 一个长度为n的序列,每个数为1~m之一.求一段连续子序列,使得其中之出现过一次的数对应的价值之和最大. 输入 第一行两个整数n,m(1<=m<=n<=1000000). 第 ...

  2. jmeter的build.xml

    <?xml version="1.0"?><!--   Licensed to the Apache Software Foundation (ASF) unde ...

  3. [bzoj] 3343 教主的魔法 || 带修改分块

    原题 长度为n的序列,有两种操作: 1.[l,r]区间每个数+w 2.询问[l,r]区间有多少个数>c 记录lazy数组即可. #include<cstdio> #include&l ...

  4. [poj] 1204 Word Puzzles || AC自动机

    原题 给个X*Y的字符串矩阵,W个询问,对每个询问输出这个串出现的位置及方向,共有8个方向,顺时针开始分别用A~H表示 AC自动机的板子题. 对于待匹配串建一个自动机,然后从矩阵的四周分别沿八个方向跑 ...

  5. 洛谷 P2797 Facer的魔法 解题报告

    P2797 Facer的魔法 题意:给你n个数,你可以选若干个数,使得平均数减中位数最大 数据范围:\(n \le 10^5\) 原题CF626E 很容易想到枚举一个中位数,但是如果选取的数字的个数是 ...

  6. bzoj1494【Noi2007】生成树计数

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1494 sol  :前排膜拜http://blog.csdn.net/qpswwww/artic ...

  7. nginx支持pathinfo

    server { root /webserver/www/api; listen ; server_name api.dnxia.com; location / { if (!-e $request_ ...

  8. Custom Email Attribute在客户端不起作用原因

    原文发布时间为:2011-07-16 -- 来源于本人的百度文章 [由搬家工具导入] Custom Email Attribute在客户端不起作用原因,就是未实现 IClientValidatable ...

  9. Extend Html.EditorFor MVC

    原文发布时间为:2011-09-07 -- 来源于本人的百度文章 [由搬家工具导入] http://aspadvice.com/blogs/kiran/archive/2009/11/29/Addin ...

  10. 分享一下我写的.net 2.0的orm类,实现mvc。可以用于webform等环境中,这是orm的原理部分。

    using System;using System.Collections.Generic;using System.Configuration;using System.Data;using Sys ...