在文档中HttpResponseCache
有一个部分:
使用早期版本
这个类是在 Android 4.0 (Ice Cream Sandwich) 中添加的。使用反射来启用响应缓存而不影响早期版本:
try { File httpCacheDir = new File(context.getCacheDir(), "http"); long httpCacheSize = 10 * 1024 * 1024; // 10 MiB Class.forName("android.net.http.HttpResponseCache") .getMethod("install", File.class, long.class) .invoke(null, httpCacheDir, httpCacheSize); } catch (Exception httpResponseCacheNotAvailable) { }
您可以在关于 SO 的问题(例如此处)和网络上的示例中通过反射查看此调用。我还接管了包含这个确切片段的代码来设置缓存(包括注释,所以它可能只是 copypasta)。但是,我不太明白为什么你必须在这里使用反射。
通常,当我想使用在我定义的某个 API 级别添加的方法时minSdkVersion
,我会使用以下模式:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// do something here
}
那么为什么这不是HttpResponseCache
. 使用反射有什么好处?它当然不会增加我的代码的可读性。HttpResponseCache
以这种方式使用反射时,实际上是否在 ICS 下工作?
编辑:我这里没有旧的 Android 设备,我的模拟器根本拒绝启动,所以我现在不能简单地测试它。也许它只是在没有反射的情况下可怕地崩溃。