预先获取数据
预先获取数据是一种有效的减少大量的独立的数据传输会话的方法。它允许基于一个连接,在给定的单一时间周期内,满负荷的下载所有的需要的数据。
通过提前下载,可以减少大量的下载数据所需的无线活跃信号。这样不仅可以保存电池电量,也可以改善延迟、降低所需的带宽、减少下载时间。
在执行一个操作或浏览数据之前,通过预下载所需的数据,可以减少应用程序因等待下载而造成应用延迟,从而改善用户体验。
但是,如果过分使用,会引发电池和带宽消耗的增加,以及下载的数据过多(下载了不使用的数据)。确保应用程序不会因为等待预先获取数据而造成应用程序启动的延迟,也是很重要的。在实际的应用中,这意味着应用程序要逐步的处理数据,或者优先下载或处理应用程序启动所需的数据。
如何预先获取数据,依赖要下载的数据的大小和它们被使用的可能性。概要的指南是基于上述的状态机,在当前的用户会话中,要下载那些有50%机会被使用的数据,通常要预先获取大于6秒钟左右的数据(大约1~2M),以便让下载的未使用的数据跟前面既存的数据相匹配。
一般来说你只需每隔2到5分钟来启动一次下载操作,并按顺序下载1到5M的数据,这是一种好的预先获取数据的实践。
遵循这个原则,大数据的下载---如视频文件,应该以数据块的方式,定期(每隔2到5分钟)的被下载,这样就看可以预先获取数据,以便能够高效的观看后续的图像。
注意,预先下载应该跟批量传输和连接绑定,并且它会根据连接的类型和速度来变化。
以下是一些实践的例子:
音乐播放器
你可以选择预先获取整个专辑,但是如果用户听完第一首歌曲之后就停止了,那么就会浪费大量的带宽和电池电量。
好的方法应该是,除了正在播放的歌曲之外,还要维持一首歌曲的缓存。对于流媒体音乐,不要在所有时间都保持无线信号的活跃状态,以便维持连续的数据流,要考虑使用HTTP的实时流来传输音频流,这样就可以模拟上述的预先获取数据的方法。
新闻阅读器
很多新闻应用程序都通过选择分类后,只下载头条的方式来视图减少带宽的使用,只有在用户想要阅读时,才开始下载全文,并把阅读的部分滚动到视图中。
使用这种方法,为了用户的大多数的阅读会话,如翻阅头条、改变分类、以及阅读文章等,都要强制保持无线信号的活跃状态。不仅如此,而且在固定能耗状态之间切换时,也会导致切换分类或阅读文章的明显延迟。
一种较好的做法是,在启动时预先获取一定数量的可阅读数据。以第一组新闻的头条和摘要开始,在确保最低的启动延时同时,还有包含剩余的头条和摘要,以及主要头条列表中的每篇文章的文本。
另一种做法是预先获取每个头条、摘要、文章文本,以及全部的文章相关的图片---通常是在后台按照预定的计划来预先下载。这种方法的风险在于,会明显的消耗带宽和电池电量,并且有可能会下载一些用户从不使用的内容,因此要小心使用。
一种解决方案是只在Wi-Fi链接时才进行完整数据的下载,并尽可能的在设备充电时执行。在基于连接类型修改下载方案中会详细讨论。