每次加载视图时都会将数据保存在内存中或加载?

时间:2016-05-19 13:13:29

标签: android singleton mvp

我正在实现使用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;
}

1 个答案:

答案 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代码。