[Android Traffic] 使用缓存来避免重复的下载

简介:

转载自: http://blog.csdn.net/kesenhoo/article/details/7395817

Redundant Downloads are Redundant[重复下载是冗余的]

  • 减少下载的最基本方法是仅仅下载那些你需要的[美国人的思维还是比较直接,虽然这句话看起来比较搞笑,但是很有道理]。从数据的角度看,我们可以通过传递类似上次更新时间这样的参数来制定查询某些数据。
  • 同样,在下载图片的时候,server那边最好能够减少图片的大小,而不是让我们下载完整大小的图片。

Cache Files Locally [缓存文件到本地]

  • 避免下载重复的数据是很重要的。可以使用缓存机制来处理这个问题。缓存static的资源,例如完整的图片。这些缓存的资源需要分开存放。
  • 为了保证app不会因为缓存而导致显示的是旧数据,请从缓存中获取最新的数据,当数据过期的时候,会提示进行刷新。
  1. 复制代码
    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();
  • 不管是存放在哪里的文件都会在app卸载的时候被清除。

Use the HttpURLConnection Response Cache[使用HttpURLConnection Response缓存]

  • Android 4.0里面为HttpURLConnection增加了一个response cache,我们可以使用反射机制开启HTTP response cache,看下面的例子:
  1. 复制代码
    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.");  
      }  
    }  
    复制代码
  • 上面的sample code会在Android 4.0以上的设备上开启response cache,同时不会影响到之前的程序。
  • 在cache被开启之后,所有cache中的HTTP请求都可以直接在本地存储中进行响应,并不需要开启一个新的网络连接。
  • 被cache起来的response可以被server所确保没有过期,这样就减少了带宽。没有被cached的response会因方便下次请求而被存储在response cache中。
 
后记:Cache机制在很多实际项目上都有使用到,实际操作会复杂许多,有机会希望能够分享一个Cache的实例。
 

学习自:http://developer.android.com/training/efficient-downloads/redundant_redundant.html,谢谢!

转载请注明出处:http://blog.csdn.net/kesenhoo,谢谢!
分类:  Android Traffic
本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/4324447.html如需转载请自行联系原作者

demoblog
相关文章
|
1月前
|
存储 缓存 Android开发
安卓Jetpack Compose+Kotlin, 使用ExoPlayer播放多个【远程url】音频,搭配Okhttp库进行下载和缓存,播放完随机播放下一首
这是一个Kotlin项目,使用Jetpack Compose和ExoPlayer框架开发Android应用,功能是播放远程URL音频列表。应用会检查本地缓存,如果文件存在且大小与远程文件一致则使用缓存,否则下载文件并播放。播放完成后或遇到异常,会随机播放下一首音频,并在播放前随机设置播放速度(0.9到1.2倍速)。代码包括ViewModel,负责音频管理和播放逻辑,以及UI层,包含播放和停止按钮。
142 0
|
2月前
|
Java Android开发
android 下载图片的问题
android 下载图片的问题
23 3
|
25天前
|
Android开发 Windows
如何离线下载 Microsoft Corporation II Windows Subsystem for Android
如何离线下载 Microsoft Corporation II Windows Subsystem for Android
25 1
|
1月前
|
缓存 Android开发 Kotlin
【安卓app开发】kotlin Jetpack Compose框架 | 先用OKhttp下载远程音频文件再使用ExoPlayer播放
使用 Kotlin 的 Jetpack Compose 开发安卓应用时,可以结合 OkHttp 下载远程音频文件和 ExoPlayer 进行播放。在 `build.gradle` 添加相关依赖后,示例代码展示了如何下载音频并用 ExoPlayer 播放。代码包括添加依赖、下载文件、播放文件及简单的 Compose UI。注意,示例未包含完整错误处理和资源释放,实际应用需补充这些内容。
|
1月前
|
存储 Android开发 Kotlin
开发安卓app OKhttp下载后使用MediaPlayer播放
在Android Jetpack Compose应用程序中,要使用OkHttp下载远程音频文件并在本地播放,你需要完成以下几个步骤: 1. **添加依赖**:确保`build.gradle`文件包含OkHttp和Jetpack Compose的相关依赖。 2. **下载逻辑**:创建一个`suspend`函数,使用OkHttp发起网络请求下载音频文件到本地。 3. **播放逻辑**:利用`MediaPlayer`管理音频播放状态。 4. **Compose UI**:构建用户界面,包含下载和播放音频的按钮。
|
23天前
|
缓存 编解码 安全
Android经典面试题之Glide的缓存大揭秘
Glide缓存机制包括内存和硬盘缓存。内存缓存使用弱引用的ActiveResources和LRU策略,硬盘缓存利用DiskLruCache。Engine.load方法首先尝试从内存和弱引用池加载,然后从LRU缓存中加载图片,增加引用计数并移出LRU。若缓存未命中,启动新任务或加入现有任务。内存大小根据设备内存动态计算,限制在0.4以下。DiskLruCache使用自定义读写锁,保证并发安全,写操作通过锁池管理,确保高效。
16 0
|
1月前
|
JSON 编解码 Apache
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
23 1
|
1月前
|
缓存 Java Spring
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解
20 0
|
1月前
|
开发工具 Android开发
Android studio历史版本下载
Android studio历史版本下载
112 0
|
2月前
|
XML 存储 开发工具
Android Studio如何将APK下载
【5月更文挑战第16天】