不耗电传输数据(三):避免多余的下载

避免多余的下载

很多用户间歇性的联网并且有下载量的限制。你可以鼓励用户与应用交互的时候尽量降低下载量。

降低下载量最根本的方式就是只下载有用的数据。这里的数据指的是实现了REST API,允许你指定查询标准,用参数比如上次下载时间来限制返回的数据。

相似的,当下载图片时,最好在服务器端压缩一下,而不是下载大图片,再在本地压缩显示。

本地文件缓冲

另一个重要的技术就是避免重复下载。你可以用缓冲来降低重复下载相同数据的可能性。通过缓冲应用数据和资源,你可以创建一个应用需要的信息的本地副本。如果应用短期内需要多次访问同一个信息,那么只需要下载一次到缓冲区就可以了。

为了降低总下载量,缓冲越多越好。只要合理,总是缓冲静态资源,包括用户请求的图片的全文下载。用户请求的资源应单独存储,以便定期刷新缓冲区来管理他的大小。

为了确保你的应用显示的不是过期的信息,要从HTTP返回的头信息中解析出所请求的内容的上次更新时间和过期时间。这样你就知道什么时候该刷新相关内容了。

// url represents the website containing the content to place into the cache.
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

long currentTime = System.currentTimeMillis();
long expires = conn.getHeaderFieldDate("Expires", currentTime);
long lastModified = conn.getHeaderFieldDate("Last-Modified", currentTime);

// lastUpdateTime represents when the cache was last updated.
if (lastModified < lastUpdateTime) {
   
// Skip update
} else {
   
// Parse update
    lastUpdateTime = lastModified;
}

用这个策略,你可以高效的动态缓冲数据并保证应用不显示过期信息。

你可以在非托管的外部缓冲路径缓冲不是那么敏感的信息。

Context.getExternalCacheDir();

你也可以选择用托管的安全的应用缓冲。注意内部缓冲可能会在系统内存地的时候被清掉。

Context.getCacheDir();

 

注意:不管存在哪个路径下,当应用卸载的时候,数据都会被清掉。

用HttpsURLConnection 返回缓冲

Android4.0给HttpURLConnection添加了一个返回缓冲。你可以通过反射打开这个返回缓冲。

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.");

  }

}

这段代码打开了Android4.0+设备上的返回缓冲,并且兼容了之前的版本。

缓冲安装后,完全缓冲的HTTP请求可以直接从本地下载,避免了打开网络连接。缓冲的数据有条件的情况下可以与服务器同步,降低了下载所需带宽。

猜你喜欢

转载自blog.csdn.net/yubing1015/article/details/84858815