安卓性能优化4-1 网络缓存

    知道怎样才能最快速地有效下载一份资料吗?

    就是索性不下载!


    
谈到网络性能,如何妥善缓存网络数据是最基本的性能,做得好就能创造更多价值。从根本上来说从自己的设备上读取数据永远

比通过连网读取同样的数据更快,如果一份数据会多次使用,那么很有必要从网上下载下来,存在自己的设备里;这样将来用的时

候,就无需再次下载。

    
可是这里有个小问题,HTTPcaching is disabled byDefault,在默认情况下,安卓应用无法缓存HTTP响应。

    
在你的app中,几乎需要的所有东西,在下载之后都唾手可得。启动缓存,即使用HttpResponseCache,这样就能在设备上确定位

置,像实体文档的储存一样;同时,也有缓存的最大空间。


    
这样一旦启动,应用程序的所有HTTP响应均可缓存在文档系统里。的确,这可以适用于API,就像URL链接,HTTPURL链接以及所

有 从堆栈溢出的样本拷贝粘贴而来的酷炫代码片断一样

    
不要忘了这也适用于捆绑到应用程序的库提出的所有HTTP请求。

    
值得注意的是,使用HttpResponseCache时,会存在数据从设备流失的两种情况:

  • 其一是如果缓存已满,那么系统为给新数据空间将自动删除未经使用的旧文件
  • 其二是会根据包括服务器响应在内的缓存管理头部信息将部分文件移除


    
比如,如果需要HTTP1.1标准组服务器将对需数据发出终止信号,告知在设备里信息的 缓存时间为多长,如果服务器表示:缓存

时间为三天,那么,设备里就能保证资料,不会 在三天内流失;如果服务器表示无法缓存,那么文件将不会在设备缓存。


    
一般而言HttpResponseCache会让服务器全权管理如何缓存内容。如果服务器能够自动识别我们所需要的数据,也非常了解设备

如何使用这些数据;而且网络环境又不复杂的话,是绝对没有问题的。



    
或者如果我们能够人为控制服务器,能够准确地在储存器上,设置出每种数据的类型,也是没有问题的。


    
若是不止如此,则会有更多麻烦。特别是在无法控制服务器时,比方说

  • 要是服务器从来不设置缓存时间,设备上什么都无法缓存怎么办?
  • 要是缓存值与设备的实体资源存在冲突,比如错估可用的缓存空间怎么办?
  • 要是客户端为了适应高延迟环境,试图修改缓存方式以适合这种环境需求,服务器却依旧认定你处于4G环境下而不允许怎么办?


    
基本上在这些高级环境下,需要对HttpResponseCache搏一把。

    
因此需要准备自己的缓存问题解决方案,主要有两点

  • 第一编写管理器向硬盘缓存 和从中读取资料的储存管理
  • 第二根据数据的类型 和设备的状况,来创建自己的缓存策略


    
编写自己的磁盘缓存是有点难度的,如果不是非要自定义不可,就去安卓资源库直接下载DiskLRUCache.Java的程序,再按自己的

需求重新目的化。DiskLruCache


    
已有一份样本代码包,你可以看一看。可能更复杂的是,如何为从服务器里所取得有用资料类型,确立一套缓存策略,比如缩略

图缓存不要像高分辨率图片缓存那么频繁;像服务器ping之类的数据就根本不用缓存,还有 我们有可能希望,描述UI数据的服务器

响应,能保留更长时间。



    
说实话这不是一般的复杂,多亏有库帮忙。这就容易多了。

    
拥有Volley或者okHTTP库,就能从开始实现更稳定的网络运行,不过还得调整一下源代码,让它调用自定义的缓存逻辑,顺便提

一句,现在有Picasso图库,可以代表我们进行自定义图像缓存管理。

     如果不太确定,缓存或者丢失数据会对应用程序的影响,一定要看一下安卓工作室的网络监控工具,在那儿可以明确看到,发出

和接收的各种类型请求。


    
如果你发现有对内容的请求,而这些数据本该被缓存,那就说明你应该更加深入地去挖掘。


    
这就是我喜欢用AT&TARO工具的原因。

    
它就可以实现这一点,用网络请求来深入挖掘,甚至能够检查将哪些类型的网络头部数据,发送到设备。

     然而缓存数据仅仅是个开始,所以需要大家好好看看,安卓性能模式的其它内容,并且不要忘了加入Google+社区,这里有为大家

提供的各种小技巧。

    

    保持冷静分析代码 要牢牢记住 性能最重要




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值