批处理传输和连接

每次启动一个连接---跟传输的数据大小无关---在使用典型的3G无线信号时,就会潜在的导致无线信号消耗近20秒的电量。

如果一个应用程序每隔20秒ping一次服务器,只是告知该应用程序正在运行,且对用户是可见的,那么无线信号的保持将无法限制,这会导致在几乎没有实际数据传输的情况下,明显的消耗电池电量。

基于以上考虑,重要的是要把传输的数据打包,并创建一个传输队列。这样由于发生在类似的时间窗内,就可以提高传输效率,从而尽可能的确保缩短无线信号消耗电量所持续的时间。

这种方法的基本原理是在限制必要的会话数量的同时,尽可能的每次会话期间传输更多的数据。

这就意味着你要容忍通过队列批量传输数据所带来的延迟,并且它会抢占计划内的更新和数据预获取处理,以便这些传输在所需的敏感的传输时间内都能够被执行。同样,计划好的更新和定期的预获取数据也应该启动该传输队列的执行。

现在,我们选取上文中介绍的预获取数据的一个示例详细说明。

新闻阅读器需要收集一些用于分析的信息,来弄清楚用户的阅读模式,以及最流行的故事的排行。为了保持新闻的新鲜度,它每小时都要检查更新。为了节省带宽,它不会下载每篇文章的全部图片,它只会预先下载一些缩略图,并且在这些缩略图被选中时才下载全部图片。

在这个示例中,在应用程序中收集到所有分析信息应该被打包到一起,并放到用于下载的队列中,而不是在收集的时候就传输。这个结果数据包应该在下载全尺寸图片或执行更新处理时被传输。

任何时间敏感或按需传输的数据---如下载全尺寸图片,都应该由于定期更新处理。计划好的更新应该在按需传输的同时被执行,并在设置的间隔之后发生下次更新计划。这种方法在需要下载图片时,捎带执行了定期更新,从而有效的降低了定期更新的执行成本。

减少连接

通常,重用既存的网络连接比启动一个新的连接更加高效。重用连接还让网络更加智能的应对网络拥堵和相关网络数据的问题。

不要创建多个并发连接来下载数据,也不要连续发多个GET请求,而是要尽可能的把多个请求打包的一个GET请求中。

例如,在一个单一的请求/响应处理中来获取每篇新闻文章,比为了几篇文章而使用多次查询的策略要更加高效。为了传输跟服务器和客户端相匹配的超时的终止/终止确认包,无线信号需要转换为活跃状态,因此好的做法是在不使用连接时主动把它关闭,而不是等待连接超时。

但是,连接关闭太早会阻碍连接的复用,从而导致在建立新的连接时又会产生额外的开销。一个折中的方案是不立即关闭连接,但在其超时之前依然主动关闭它。

Android---优化下载让网络访问更高效(三)的更多相关文章

  1. Android开发9:网络访问&Web服务开发

    前言 啦啦啦各位小伙伴们好~ 一起进入我们今天的主题.今天我们将和大家学习网络访问和Web服务开发的相关知识,一起学习熟练使用 HttpURLConnection 访问 WebService,熟悉使用 ...

  2. 这些小工具让你的Android 开发更高效

    在做Android 开发过程中,会遇到一些小的问题.尽管自己动手也能解决.可是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vy ...

  3. Andoid 更好的Android多线程下载框架

    概述 为什么是更好的Android多线程下载框架呢,原因你懂的,广告法嘛! 本篇我们我们就来聊聊多线程下载框架,先聊聊我们框架的特点: 多线程 多任务 断点续传 支持大文件 可以自定义下载数据库 高度 ...

  4. 更好的Android多线程下载框架

    /** * 作者:Pich * 原文链接:http://me.woblog.cn/ * QQ群:129961195 * Github:https://github.com/lifengsofts */ ...

  5. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  6. Android实现网络访问

    Android实现网络访问 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 1) 熟练使用HttpURLConnection访问WebServ ...

  7. Android (cocos2dx 网络访问)访问权限设置

    Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: 同样的如果用到其它的权限,也需要作出声明,部分权限列表如下: androi ...

  8. Android中使用http协议访问网络

    HTTP协议的工作原理:客户端向服务器端发送http请求,服务器端收到请求后返回一下数据给客户端,客户端接受消息并进行解析. 在Android中发送http请求的方式有两种,第一种是通过HttpURL ...

  9. Android下基于线程池的网络访问基础框架

    引言 现在的Android开发很多都使用Volley.OkHttp.Retrofit等框架,这些框架固然有优秀的地方(以后会写代码学习分享),但是我们今天介绍一种基于Java线程池的网络访问框架. 实 ...

随机推荐

  1. 关于T-SQL重编译那点事,内联函数和表值函数在编译生成执行计划的区别

    本文出处:http://www.cnblogs.com/wy123/p/6266724.html 最近在学习 WITH RECOMPILE和OPTION(RECOMPILE)在重编译上的区别的时候,无 ...

  2. jQuery选择器部分知识点总结

    一.jQuery选择器的优势 1.使用CSS选择器时,开发人员需要考虑主流浏览器是否支持某些选择器,而在jQuery中,开发人员则可以放心的使用jQuery选择器而无需考虑浏览器是否支持这些选择器. ...

  3. centos 给鼠标右击添加 “打开终端” 菜单项

    1.以root身份在终端执行如下命令 yum -y install nautilus-open-terminal   2.重启操作系统 shutdown -r now

  4. 重新开始学习javase_对象的摧毁

    一.概述(转:@深入理解Java虚拟机:JVM高级特性与最佳实践(最新第二版) ) 经过半个世纪的发展,内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了 ...

  5. 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)

    3.5.2  字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...

  6. asp.net使用Mysql乱码处理

    在asp.net与mysql数据库打交道的时候,由于配置的问题,会遇到自己写的方法在读取数据库中数据的时候,英文,数字可以正常通过,但是中文就无法通过,以登录为例(方法略),当输入英文用户名的时候可以 ...

  7. oracle常用SQL总结

    这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...

  8. [jstl] forEach标签使用

     在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JS ...

  9. javascript 字符串滚动显示

    <html> <head> <script type="text/javascript"> var chars = "JavaScri ...

  10. ES5数组方法

    先标明参考出处: http://blog.csdn.net/codebistu/article/details/8049705 本来写过一篇有关数组新方法的(详见: [转]JavaScript函数和数 ...