16

保持我的问题简短,我创建了一个包含 3 个活动的应用程序,其中 A - 类别列表,B - 项目列表,C - 单个项目。B 和 C 中显示的数据是从在线 XML 中解析出来的。但是,如果我经过 A -> B1 -> C,然后返回 A,然后返回 B1,我希望将其数据缓存在某处,这样我就不必再次请求 XML。

我是 Android 和 Java 编程的新手,我用谷歌搜索了很多,但仍然找不到(或者根本不知道在哪里寻找)一种方法来做我想做的事。

将所有接收到的数据存储在主要活动 A(HashMaps?ContentProviders?)中,然后传递给 B 和 C(如果他们得到与以前相同的请求)是一个好主意吗?

4

3 回答 3

12

缓存信息或跟踪应用程序状态的一种简单而快速的方法是扩展应用程序,如本文所述。

这篇博文忘记添加您必须在清单中设置您的CustomApplication类,例如:

<application [...] android:name="CustomApplication">

在我的项目中,我通过 getInstance 坚持单例样式。

更多资源:这个答案Android 应用程序中的全局变量这篇博文

于 2010-06-14T16:24:59.827 回答
2

如果您想在内存上构建某种缓存,请考虑使用带有 SoftReferences 的 Map。SoftReferences 是一种倾向于将您的数据保留一段时间的引用,但不会阻止它被垃圾收集。

手机上的内存是稀缺的,因此将所有内容都保存在内存中可能不切实际。在这种情况下,您可能希望将缓存保存在设备的辅助存储中。

从Google 的 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

于 2010-06-14T16:54:02.167 回答
-1

您可以按照此处的 Android 参考http://developer.android.com/guide/topics/data/data-storage.html中的说明使用数据存储

于 2010-04-20T18:41:23.267 回答