Android-使用WeakReference

时间:2019-04-16 10:22:24

标签: java android memory-leaks weak-references

我有一个简单的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");

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

我的方法正确吗?不知道它是否不会引起任何意外行为或内存泄漏。

3 个答案:

答案 0 :(得分:0)

  

这种方法在数据较少但大型数据的情况下效果很好   那时内存进入应用程序可能无法正确响应

答案 1 :(得分:0)

您可以使用共享首选项存储数据。我要添加我以前的答案的链接,这将帮助您的答案查找此链接:-Updating an object stored in one Activity from another activity

答案 2 :(得分:0)

我建议使用SoftReference,它对缓存更好,对象的寿命更长。如果GC删除了您实际需要的数据怎么办?可以随时通过GC删除WeakReference或SoftReference对象。