【Android Developers Training】 85. 不要有冗

系统 1573 0

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接: http://developer.android.com/training/efficient-downloads/redundant_redundant.html


最基本的减少你的下载数量的方法就是只下载你需要的数据。就数据而言,这就意味着实现REST APIs(译者注:REST即Representational State Transfer,意为表述性转移状态,在Web服务中,经常能看到基于RESTful的设计风格),它可以允许你使用一些参数如:上一次更新的时间,来指定限制返回数据的查询条件。

类似的,当下载图片时,减少服务端的图片尺寸,而不是在客户端把完整图片全下载下来再调整尺寸,也是一个好的习惯。


一). 在本地缓存文件

另一个重要的技术是避免下载重复数据。你可以使用缓存来实现。总是缓存静态资源,如包括一些点播类的下载如完整尺寸的图片(如果条件允许的话)。这类资源应该独立地存储起来,来保证你能定期的清空你的资源缓存从而能够控制它的大小。

要保证你的缓存不会导致你的应用显示的是陈旧的无用信息,应该从HTTP响应头中,提取出这个请求内容上一次更新的时间,以及它什么时候会过期。这可以让你确定什么时候相关的内容要被刷新。

      
        long
      
       currentTime =
      
         System.currentTimeMillis());



HttpURLConnection conn 
      
      =
      
         (HttpURLConnection) url.openConnection();




      
      
        long
      
       expires = conn.getHeaderFieldDate("Expires"
      
        , currentTime);


      
      
        long
      
       lastModified = conn.getHeaderFieldDate("Last-Modified"
      
        , currentTime);



setDataExpirationDate(expires);




      
      
        if
      
       (lastModified <
      
         lastUpdateTime) {

  
      
      
        //
      
      
         Skip update
      
      

} 
      
        else
      
      
         {

  
      
      
        //
      
      
         Parse update
      
      

}
    

使用这一方法,你可以有效地缓存动态数据,而又不会导致你的应用使用的数据是陈旧的。

另外,你可以将不敏感的数据缓存在不被管理的外部缓存目录中:

      Context.getExternalCacheDir();
    

另外,你也可以使用管理的/安全的应用缓存。但是要注意当系统的存储资源不够时,这一内部缓存会被自动清空。

      Context.getCache();
    

当应用被卸载时,不管文件存储于哪一种类型的缓存,都会被清除。


二). 使用HttpURLConnection响应缓存

Android 4.0在“ HttpURLConnection ”中添加了一个响应缓存。你可以在支持的设备上使用JAVA反射(如下所示)来启用HTTP响应缓存:  

      
        private
      
      
        void
      
      
         enableHttpResponseCache() {

  
      
      
        try
      
      
         {

    
      
      
        long
      
       httpCacheSize = 10 * 1024 * 1024; 
      
        //
      
      
         10 MiB
      
      

    File httpCacheDir = 
      
        new
      
       File(getCacheDir(), "http"
      
        );

    Class.forName(
      
      "android.net.http.HttpResponseCache"
      
        )

         .getMethod(
      
      "install", File.
      
        class
      
      , 
      
        long
      
      .
      
        class
      
      
        )

         .invoke(
      
      
        null
      
      
        , httpCacheDir, httpCacheSize);

  } 
      
      
        catch
      
      
         (Exception httpResponseCacheNotAvailable) {

    Log.d(TAG, 
      
      "HTTP response cache is unavailable."
      
        );

  }

}
      
    

这一样例代码会在Android 4.0+的设备上启用响应缓存,而不会影响到早期版本的系统。

在使用了该缓存后,被完整缓存的的HTTP请求可以直接被本地存储所响应,从而不需要再打开一个新的网络连接。另外缓存可以定期通过向服务器询问自己的实时性,这样就可以避免了一部分由于下载数据导致的带宽损耗。

没有被缓存的响应会被存储于响应缓存中以备将来可以用来响应相关的请求。

【Android Developers Training】 85. 不要有冗余的下载


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论