Android---优化下载让网络访问更高效(三)
批处理传输和连接
每次启动一个连接---跟传输的数据大小无关---在使用典型的3G无线信号时,就会潜在的导致无线信号消耗近20秒的电量。
如果一个应用程序每隔20秒ping一次服务器,只是告知该应用程序正在运行,且对用户是可见的,那么无线信号的保持将无法限制,这会导致在几乎没有实际数据传输的情况下,明显的消耗电池电量。
基于以上考虑,重要的是要把传输的数据打包,并创建一个传输队列。这样由于发生在类似的时间窗内,就可以提高传输效率,从而尽可能的确保缩短无线信号消耗电量所持续的时间。
这种方法的基本原理是在限制必要的会话数量的同时,尽可能的每次会话期间传输更多的数据。
这就意味着你要容忍通过队列批量传输数据所带来的延迟,并且它会抢占计划内的更新和数据预获取处理,以便这些传输在所需的敏感的传输时间内都能够被执行。同样,计划好的更新和定期的预获取数据也应该启动该传输队列的执行。
现在,我们选取上文中介绍的预获取数据的一个示例详细说明。
新闻阅读器需要收集一些用于分析的信息,来弄清楚用户的阅读模式,以及最流行的故事的排行。为了保持新闻的新鲜度,它每小时都要检查更新。为了节省带宽,它不会下载每篇文章的全部图片,它只会预先下载一些缩略图,并且在这些缩略图被选中时才下载全部图片。
在这个示例中,在应用程序中收集到所有分析信息应该被打包到一起,并放到用于下载的队列中,而不是在收集的时候就传输。这个结果数据包应该在下载全尺寸图片或执行更新处理时被传输。
任何时间敏感或按需传输的数据---如下载全尺寸图片,都应该由于定期更新处理。计划好的更新应该在按需传输的同时被执行,并在设置的间隔之后发生下次更新计划。这种方法在需要下载图片时,捎带执行了定期更新,从而有效的降低了定期更新的执行成本。
减少连接
通常,重用既存的网络连接比启动一个新的连接更加高效。重用连接还让网络更加智能的应对网络拥堵和相关网络数据的问题。
不要创建多个并发连接来下载数据,也不要连续发多个GET请求,而是要尽可能的把多个请求打包的一个GET请求中。
例如,在一个单一的请求/响应处理中来获取每篇新闻文章,比为了几篇文章而使用多次查询的策略要更加高效。为了传输跟服务器和客户端相匹配的超时的终止/终止确认包,无线信号需要转换为活跃状态,因此好的做法是在不使用连接时主动把它关闭,而不是等待连接超时。
但是,连接关闭太早会阻碍连接的复用,从而导致在建立新的连接时又会产生额外的开销。一个折中的方案是不立即关闭连接,但在其超时之前依然主动关闭它。
Android---优化下载让网络访问更高效(三)的更多相关文章
- Android开发9:网络访问&Web服务开发
前言 啦啦啦各位小伙伴们好~ 一起进入我们今天的主题.今天我们将和大家学习网络访问和Web服务开发的相关知识,一起学习熟练使用 HttpURLConnection 访问 WebService,熟悉使用 ...
- 这些小工具让你的Android 开发更高效
在做Android 开发过程中,会遇到一些小的问题.尽管自己动手也能解决.可是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vy ...
- Andoid 更好的Android多线程下载框架
概述 为什么是更好的Android多线程下载框架呢,原因你懂的,广告法嘛! 本篇我们我们就来聊聊多线程下载框架,先聊聊我们框架的特点: 多线程 多任务 断点续传 支持大文件 可以自定义下载数据库 高度 ...
- 更好的Android多线程下载框架
/** * 作者:Pich * 原文链接:http://me.woblog.cn/ * QQ群:129961195 * Github:https://github.com/lifengsofts */ ...
- 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)
1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- Android实现网络访问
Android实现网络访问 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 1) 熟练使用HttpURLConnection访问WebServ ...
- Android (cocos2dx 网络访问)访问权限设置
Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: 同样的如果用到其它的权限,也需要作出声明,部分权限列表如下: androi ...
- Android中使用http协议访问网络
HTTP协议的工作原理:客户端向服务器端发送http请求,服务器端收到请求后返回一下数据给客户端,客户端接受消息并进行解析. 在Android中发送http请求的方式有两种,第一种是通过HttpURL ...
- Android下基于线程池的网络访问基础框架
引言 现在的Android开发很多都使用Volley.OkHttp.Retrofit等框架,这些框架固然有优秀的地方(以后会写代码学习分享),但是我们今天介绍一种基于Java线程池的网络访问框架. 实 ...
随机推荐
- 关于T-SQL重编译那点事,内联函数和表值函数在编译生成执行计划的区别
本文出处:http://www.cnblogs.com/wy123/p/6266724.html 最近在学习 WITH RECOMPILE和OPTION(RECOMPILE)在重编译上的区别的时候,无 ...
- jQuery选择器部分知识点总结
一.jQuery选择器的优势 1.使用CSS选择器时,开发人员需要考虑主流浏览器是否支持某些选择器,而在jQuery中,开发人员则可以放心的使用jQuery选择器而无需考虑浏览器是否支持这些选择器. ...
- centos 给鼠标右击添加 “打开终端” 菜单项
1.以root身份在终端执行如下命令 yum -y install nautilus-open-terminal 2.重启操作系统 shutdown -r now
- 重新开始学习javase_对象的摧毁
一.概述(转:@深入理解Java虚拟机:JVM高级特性与最佳实践(最新第二版) ) 经过半个世纪的发展,内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了 ...
- 你好,C++(11)如何用string数据类型表示一串文字?根据初始值自动推断数据类型的auto关键字(C++ 11)
3.5.2 字符串类型 使用char类型的变量我们可以表示单个字符,那么,我们又该如何表示拥有多个字符的字符串呢? 我们注意到,一个字符串是由多个字符串连起来形成的.很自然地,一种最简单直接的方法就 ...
- asp.net使用Mysql乱码处理
在asp.net与mysql数据库打交道的时候,由于配置的问题,会遇到自己写的方法在读取数据库中数据的时候,英文,数字可以正常通过,但是中文就无法通过,以登录为例(方法略),当输入英文用户名的时候可以 ...
- oracle常用SQL总结
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...
- [jstl] forEach标签使用
在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JS ...
- javascript 字符串滚动显示
<html> <head> <script type="text/javascript"> var chars = "JavaScri ...
- ES5数组方法
先标明参考出处: http://blog.csdn.net/codebistu/article/details/8049705 本来写过一篇有关数组新方法的(详见: [转]JavaScript函数和数 ...