保持我的问题简短,我创建了一个包含3个活动的应用程序,其中A - 类别列表,B - 项目列表,C - 单项。 B和C中显示的数据是从在线XML解析的。但是,如果我通过A - > B1 - > C,然后回到A然后再回到B1,我想将其数据缓存到某处,这样我就不必再次请求XML了。
我是Android和Java编程的新手,我已经搜索了很多内容,但仍然无法找到(或者根本就没有想法在哪里看),这是一种做我想做的事情。
将所有收到的数据存储在主要活动A(HashMaps?ContentProviders?)中,然后传递给B和C(如果他们得到之前的相同请求)是个不错的主意?
答案 0 :(得分:13)
缓存信息或跟踪应用程序状态的一种简单快捷的方法是按照this blog post中的描述扩展应用程序。
此博客文章忘记添加您必须在清单中设置 CustomApplication 类,例如:
<application [...] android:name="CustomApplication">
在我的项目中,我通过getInstance坚持单身式。
更多资源:this answer,Global Variables in Android Apps和this blog post。
答案 1 :(得分:2)
如果要在内存上构建某种缓存,请考虑使用带SoftReferences的Map。 SoftReferences是一种引用,可以将您的数据保留一段时间,但不会阻止它被垃圾回收。
手机上的内存很少,因此将所有内容保存在内存中可能并不实用。在这种情况下,您可能希望将缓存保存在设备的辅助存储中。
从Google's Collections查看MapMaker,它可以方便地构建2级缓存。考虑这样做:
/** Function that attempts to load data from a slower medium */
Function<String, String> loadFunction = new Function<String, String>() {
@Override
public String apply(String key) {
// maybe check out from a slower cache, say hard disk
// if not available, retrieve from the internet
return result;
}
};
/** Thread-safe memory cache. If multiple threads are querying
* data for one SAME key, only one of them will do further work.
* The other threads will wait. */
Map<String, String> memCache = new MapMaker()
.concurrentLevel(4)
.softValues()
.makeComputingMap(loadFunction);
关于设备辅助存储设备上的缓存,请查看Context.getCacheDir()。如果你像我一样马虎,只要把所有东西留在那里,并希望系统能够在需要更多空间时为你清理东西:P
答案 2 :(得分:-1)
您可以按照Android参考中http://developer.android.com/guide/topics/data/data-storage.html
中的说明使用数据存储