我正在实现使用Repository模式提供数据的MVP模式。现在我怀疑管理活动或片段与数据之间关系的最佳方法。我的应用程序需要一组可以很大的对象,我们假设一个List。该对象应该在Map片段中显示。我知道我可以使用Singleton或Application对象并保存数据。另一种选择是每次加载需要该数据的视图时加载数据。 将数据放在Singleton中既简单又快速,但在我的情况下,对象的数量可能很大。此外,测试使用单身人士的应用程序存在问题。 另一方面,每次加载视图时加载数据都可以传达性能问题。 也许最好能够实现一个中间解决方案,比如缓存数据?
很高兴倾听你的经历。的问候,
编辑:我决定避免使用缓存来保存数据。以下是我用来缓存的方法:
/**
* generic caching methods
* @param key
* @param object
* @throws IOException
*/
private static void writeObject(String key, Object object) throws IOException {
FileOutputStream fos = TheAAApp.getApp().openFileOutput(key, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(object);
oos.close();
fos.close();
saveCurrentTimeStamp();
}
private static Object readObject(String key) throws IOException,
ClassNotFoundException {
FileInputStream fis = TheAAApp.getApp().openFileInput(key);
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
return object;
}
答案 0 :(得分:1)
我的建议是,Presenter不知道数据来自何处 - 它只是向存储库询问它,并决定是从内存缓存还是从db / network加载它。
public class Repository {
private Cache cache;
private Network network;
public void getData(Callback<Data> callback) {
if (cache.hasData()) {
callback.next(cache.getData);
}
else {
getDataFromNetwork(callback);
}
}
private getDataFromNetwork(Callback<Data> callback) {
//etc
cache.putData(data);
callback.next(data);
}
}
这比使用单例的另一个好处是Android由于不活动/内存限制而杀死了你的应用程序。如果你完全依赖单身,那么这最终可能是空的。
您还可以尝试使用不同的缓存选项,而无需更改任何Presenter / View代码。