批处理传输和连接

每次启动一个连接---跟传输的数据大小无关---在使用典型的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. oracle批量转库工作,比较快捷的方式

    select 'create table '  || t.TABLE_NAME ||  ' as select * from ODS_ZMGLXT.'|| t.TABLE_NAME ||'; ' fr ...

  2. Nginx反向代理配置配置实例

    为了节省支出,公司需要将分布在不同机器的站点都迁移到一台机器,而目前不同机器运行的是不同的web服务,部分是nginx,部分是apache,由于牵涉较多rewrite规则,为了节省修改功夫,打算迁移后 ...

  3. Swift 提示 error running playground...

    创建playground之后,我们将得到一个错误提示,Error running playground: Failed to prepare for communication with playgr ...

  4. select、pselect、poll和epoll的区别

    select.pselect.poll和epoll函数是unix中具有I/O复用的函数.什么是I/O复用?为什么要有I/O复用?以及在什么场合下使用I/O复用?既然都具有I/O复用的功能,那这几个函数 ...

  5. asp.net Server.HtmlEncode和HtmlDecode

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">< ...

  6. 浅析a标签的4个伪类 .

    关于伪类,大家最熟悉的还是a标签的4个伪类::link        有链接属性时:visited    链接地址已被访问过:active     被用户激活(在鼠标点击与释放之间发生的事件):hov ...

  7. uva 10820 (筛法构造欧拉函数)

    send a table When participating in programming contests, you sometimes face the following problem: Y ...

  8. Python下划线的使用 _ __ __obj__

    Python 用下划线作为变量前缀和后缀指定特殊变量.   _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名   核心风格:避 ...

  9. [Ioi2005]River

    设f[i][j][k]表示i上游最近的一个伐木场为j且在i所在的子树里共建了k个伐木场(不包含在i的)的最小运费和 设v为u的儿子,dist[u]为u到0号点的距离. 则当i>=j时 f[u][ ...

  10. xcode 发展史 及 做iOS 必须知道的小知识

    Xcode 3.0 是开发人员建立 Mac OS X 应用程序的最快捷方式,也是利用新的苹果电脑公司技术的最简单的途径.Xcode 3.0 将Mac OS X的轻松使用,UNIX 能量以及高性能的开发 ...