我有一个 SpiceRequest,它的工作是预先缓存一堆数据,然后可以在单独的 SpiceRequests 中单独加载。
例如,假设我的应用程序通过 SpiceRequest 下载特定影院的电影时间,我需要一个复合 SpiceRequest 来下载并预缓存一个地区所有影院的所有电影时间。
让我们称之为 AllMoviesSpiceRequest,它是 SpringAndroidSpiceRequest 的子类。它的 loadDataFromNetwork() 方法多次调用 getRestTemplate().getForObject()。它将所有数据放入一个包含对象并返回它。
我的计划是调用 onRequestSuccess 为每个剧院调用 SpiceManager.putInCache。问题是所有影院的数据集都很大,大约 16 MB,并且由于 JsonWriter.string() 无法序列化那么大的字符串,因此出现 OutOfMemory 错误。
是否可以在下载时直接从 AllMoviesSpiceRequest 缓存每个影院?我不确定从 SpiceRequest 创建和调用 SpiceManager 是否安全。还是有更好的方法可以采取?
这是一些示例代码,可以为您提供想法:
public class AllMoviesSpiceRequest extends
SpringAndroidSpiceRequest<AllMovieTimes> {
public AllMovieTimes loadDataFromNetwork() throws Exception {
AllMovieTimes allMovieTimes = new AllMovieTimes();
// Get all the theaters
Theaters theaters = getRestTemplate().getForObject(
THEATER_JSON_URL + "/" + regionId, Theaters.class);
// Get all the movies
for(Theater t : theaters.all()) {
MovieTimes mt = getRestTemplate().getForObject(
MOVIES_JSON_URL + "/" + t.getId(), MovieTimes.class);
allMovieTimes.add(mt);
// Can I call spiceManager.putInCacheHere???
}
// OutOfMemoryError!!!
return allMovieTimes;
}
}
private class AllMoviesRequestListener implements
RequestListener<AllMovieTimes> {
public void onRequestSuccess(AllMovieTimes allMovieTimes) {
// Add all the movies to the cache
for(MovieTime mt : allMovieTimes) {
spiceManager.putInCache(mt.getCacheKey(), mt);
}
}
}
提前致谢...