繁体   English   中英

Android - 使用WeakReference在内存中保存数据

[英]Android - hold data in memory with WeakReference

我有简单的DataHolder类:

public class DataHolder
{
    private static final DataHolder holder = new DataHolder();
    Map<String, WeakReference<Object>> data = new HashMap<>();

    public static DataHolder getInstance() {return holder;}

    public void save(String id, Object object)
    {
        data.put(id, new WeakReference<>(object));
    }

    public Object retrieve(String id)
    {
        WeakReference<Object> objectWeakReference = data.get(id);
        return objectWeakReference.get();
    }
}

基本上,我想保留一些数据以在其他地方检索它们(例如,其他活动或片段)。

要保存:

DataHoler.getInstance().save("list", myList);

要检索数据:

List<MyObject> list = (ArrayList) DataHoler.getInstance().retrieve("list");

我的意图是避免使用parcelable传递大量数据(这应该避免,列表可能很大)+简化所有活动/片段之间的数据访问。

我的方法是否正确? 不确定它是否会导致任何意外行为或内存泄漏。

这种方法在数据较少的情况下运行良好,但是当大量数据进入内存时,app可能无法正常响应

您可以使用共享首选项来存储数据。 我正在添加我之前回答的链接,这将有助于您的答案看到此链接: - 从另一个活动更新存储在一个活动中的对象

我建议使用SoftReference,它更适合缓存,对象会活得更久。 如果GC删除您实际需要的数据怎么办? 可以随时通过GC删除WeakReference或SoftReference对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM