Minimizing the Effect of Regular Updates[最小化定时更新操作的副作用]
- 每次app去向server询问检查是否有更新操作的时候会激活无线电,这样造成了不必要的能量消耗(在3G情况下,会差不多消耗20秒的能量)。
- C2DM是一个用来从server到特定app传输数据的轻量级的机制。使用C2DM,server会在某个app有新数据的时候通知app有这个消息[有点像PUSH短信的类型]。
- 比起轮询方式(app为了即时拿到最新的数据需要定时向server请求数据),C2DM这种有事件驱动的模式会在仅仅有数据更新的时候通知app去创建网络连接来获取数据[很显然这样减少了app的大量操作,当然也减少了很多电量]。
- C2DM需要通过使用固定TCP/IP来实现操作。当在你的设备上可以实现固定IP的时候,最好使用C2DM。[这个地方应该不是传统意义上的固定IP,可以理解为某个会话情况下]。很明显,使用C2DM既减少了网络连接次数,也优化了带宽,还减少了对电量的消耗。
Optimize Polling with Inexact Repeating Alarms and Exponential Backoffs[通过不定时的重复提醒与指数退避来优化轮询操作]
- 如果需要使用轮询机制,在不影响用户体验的前提下,当然设置默认更新频率是越低越好[减少电量的浪费]。
-
一个简单的方法是给用户提供更新频率的选择,允许用户自己来处理如何平衡数据及时性与电量的消耗。
- 当设置安排好更新操作后,可以使用不确定重复提醒的方式来允许系统把当前这个操作进行定向移动(比如推迟一会)。
alarmManager.setInexactRepeating(alarmType, start, interval, pi);
- 若是多个提醒都被做了“定向移动”,那么很有可能到某个点同时被触发,那么这样就可以使得多个操作在同一个无线电状态下操作完。
- 如果可以,请设置提醒的类型为ELAPSED_REALTIME or RTC而不是_WAKEUP。这样能够更进一步的减少在等待同时被触发的时候对电量的消耗。
- 我们还可以通过根据app被使用的频率来有选择性的减少更新的频率。
-
另一个方法在app在上一次更新操作之后还未被使用的情况下,使用指数退避算法(exponential back-offalgorithm)来减少更新频率。当然我们也可以使用一些类似指数退避的方法。
- 初始化一个网络连接的花费不会因为是否成功下载了数据而改变。我们可以使用指数退避算法来减少重复尝试(retry)的次数,这样能够避免浪费电量。例如:
后记:这一课讲到C2DM与指数退避算法等,其实这些细节很值得我们注意,如果能在实际项目中加以应用,很明显质量会比较高。谢谢!
分享到:
相关推荐
vuforia-samples-advanced-android-ios-unity-4-2-3.zip官网下载太慢了,放在网盘方便大家下载
advanced-spark-training.pdf
vuforia-samples-advanced-android-7-1-34 方便安卓的高通AR的unity示例包
Qt-Advanced-Docking-System-master
Advanced Android App Architecture pdf + epub + source code
《Android进阶解密》源码 源码目录介绍 目录 简介 chapter_12 第12章 理解ClassLoader chapter_13 第13章 热修复原理 chapter_14 第14章 Hook技术 chapter_15 第15章 插件化技术 本书内容 本书共...
yii-advanced-app-2.0.4 下载
qt Qt-Advanced-Docking-System 使用教程 示例代码
谷歌浏览器的api接口测试工具Advanced-REST-client
phoneme_advanced-mr2交叉编译,CVM移植ARM交叉编译
Advanced Bash-Scripting Guide
Kaggle比赛:波士顿房价数据集,包含训练集和测试集,以及数据描述文档,以及结果提交示例;该数据集经常用作回归类算法
Advanced Bash-Scripting Guide 3.9.1 (包括中译本) 作者:thegrendel 主页:...最重要的是作者一直跟更新和修正此文档,目前的英文版本是Version 4.2;中文版最新版本是3.9.1.
yii2高级多应用脚手架,下载yii-advanced-app-2.0.36.tgz直接使用开发,下载不了的朋友可以方便下载使用
如何保证消息的可靠性传输?(如何处理消息丢失的问题) 如何保证消息的顺序性? 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决? 如果让你写一...
谷歌插件Advanced-REST-client 谷歌插件Advanced-REST-client 谷歌插件Advanced-REST-client 谷歌插件Advanced-REST-client
Advanced Android This repository contains samples and solutions for the Advanced Android course. Introduction Each of the samples in this repository is associated with a practical exercise from the ...
关于Android开发的电子书。本书从不同视角介绍了Android内在特点和结构,适合Android的初学者阅读。
网上的别人的android例子,可以跟着看下,入门的 FragmentExample_start LocaleText3_start LocaleText_start MemoryOverload RecyclerView_start Scorekeeper_start SimpleAccessibility_start...
STM32F100xx advanced ARM-based 32-bit MCUs 手册 最新版