我有简单的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可能无法正常响应
您可以使用共享首选项来存储数据。我正在添加我之前回答的链接,这将有助于您的回答看看这个链接: - Updating an object stored in one Activity from another activity
我建议使用SoftReference,它更适合缓存,对象会活得更久。如果GC删除您实际需要的数据怎么办?可以随时通过GC删除WeakReference或SoftReference对象。