批处理传输和连接

每次启动一个连接---跟传输的数据大小无关---在使用典型的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. struts2学生信息管理系统篇章③

    package com.java1234.util; public class PageUtil { //传进来四个参数,tagetUtil是跳转链接的头部,totalNum是总个数,currentP ...

  2. 【转】 iOS 原生二维码扫描(可限制扫描区域)

    在用 AVFoundation 完成扫码后,遇到2个问题: 1,如何限制扫描范围? 2.条形码如何扫描? 一位朋友的文章帮助了我,特地转来,可以帮到有需要的朋友. 原文:http://blog.csd ...

  3. 五、C# 类

    面向对象编程 类是面向对象编程的3个主要特征---封装.继承和多态性---的基础.   封装允许隐藏细节.   继承 继承关系至少涉及两个类,其中一个类(基类)是另一个类的更泛化的版本.   为了从一 ...

  4. java_reflect_03

    关于反射在annotation中的使用,这也是本次我个人学习反射的主要目的 关于什么是annotation后续我也会整理一下,现在只大致介绍一下 一,Annotation(注解)简介: 注解大家印象最 ...

  5. 合(析)取范式转主合(析)取范式--》Java实现

    这次老师布置了如下上机作业,不限语言.思前想后,问了几个大神,说了一堆不知道什么鬼的算法名称.... 经过一番百度,发现Java可以包含库然后使用JavaScript的一些函数,其中eval() 函数 ...

  6. 【NEERC 2003】有向图破坏

    [题目描述] Alice和Bob正在玩如下的游戏.首先Alice画一个有N个顶点,M条边的有向图.然后Bob试着摧毁它.在一次操作中他可以找到图中的一个点,并且删除它所有的入边或所有的出边. Alic ...

  7. 使用JDBC连接数据库

    JDBC(Java Data Base Connectivity)数据库连接,我们在编写web应用或java应用程序要连接数据库时就要使用JDBC.使用JDBC连接数据库一般步骤有: 1.加载驱动程序 ...

  8. (转载)最实用的清除浮动代码 css的文字过长裁剪后面跟着省略号

    css: .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;} .clearfloat ...

  9. javascript 判断是否是PC还是手机端

    function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = new Array("Android" ...

  10. MongoDB-启动的时候出现了问题

    之前MongoDB启动的时候是正常的,不知道后来启动报错了,就把粘贴出来查询了.最后才知道是由于自己不正常的关闭导致的这个情况. --摘录:MongoDB非正常关闭后修复记录 mongod没有后台执行 ...