本地缓存web服务响应的最佳实践



我正在用来自Web服务的数据填充一个无限列表视图。该数据是作为对应用程序发出的POST请求的响应而获得的。缓存此类数据以避免每次用户在列表中上下滚动时都进行网络呼叫的最佳做法是什么?非常感谢。

查看LruCache类,或者更好地查看谷歌开发的Android Volley框架。

为了做到这一点,我在网络请求层添加了一个缓存方案,使缓存对API调用程序透明。缓存每x分钟过期一次。缓存使用SharedPreferences持久化,以便在应用程序重新启动时可用。例如,API调用可能是:

List<Item> items = server.getListItems(int page);

在getListItems()中,您可以检查缓存以查看是否存在有效的缓存。如果是,则返回缓存中的项目,否则进行网络调用。

事实上,API有点复杂,因为它支持立即返回过期的缓存,然后在新结果返回时进行网络调用和更新:

server.getListItems(int page, new ResultListener<List<Item>>() {
    public void onResult(List<Item> items) {
        ...
    }
});

在这个方案中,当缓存过期时,onResult()将被调用两次——一次是使用过期的缓存,一次是用新结果。

祝你好运!

试试毕加索。另一个强大的库,用于从square下载和缓存图像。它为您提供缓存方面的一切服务。但是,如果您仍在使用LruCache,请考虑为您的应用程序分配特殊数量的内存。否则,您的应用程序将导致内存命中。

最新更新