为了账号安全,请及时绑定邮箱和手机立即绑定

Android - 使用 Wea​​kReference 将数据保存在内存中

Android - 使用 Wea​​kReference 将数据保存在内存中

largeQ 2022-10-07 16:38:07
我有简单的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 传递大量数据(应该避免这种情况,列表可能很大)+简化对所有活动/片段之间数据的访问。我的方法正确吗?不确定它是否会导致任何意外行为或内存泄漏。
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

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


查看完整回答
反对 回复 2022-10-07
?
慕神8447489

TA贡献1780条经验 获得超1个赞

我推荐使用 SoftReference,它更适合缓存,对象的寿命会更长。如果 GC 删除了您实际需要的数据怎么办?WeakReference 或 SoftReference 对象可以随时被 GC 删除。



查看完整回答
反对 回复 2022-10-07
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

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



查看完整回答
反对 回复 2022-10-07
  • 3 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信