我对官方 android FAQ中的以下建议特别感兴趣。
对象弱引用的 HashMap
您还可以使用弱引用的 HashMap 到具有长键的对象。当一个 Activity 想要将一个对象传递给另一个 Activity 时,它只需将该对象放入映射中并通过 Intent Extras 将密钥(这是一个基于计数器或时间戳的唯一 Long)发送给接收者 Activity。接收者活动使用此键检索对象。`
我还没有找到如何正确实现这一点的方法。而且我不确定为什么这里首选 WeakReferences 以及为什么不使用硬引用。
我的实现(我想将XY 类的实例从活动 A发送到服务 B):
接收服务具有对象的静态 HashMap。
public static HashMap<Long, Object> parameters = new HashMap<Long, Object>();
发送部分的代码(活动 A)
long key = SystemClock.elapsedRealtime(); B.parameters.put(key, new XY()); Intent i = new Intent(this, B.class); i.putExtra("PARAM_UPLOAD", key); startService(i);
接收方代码(服务 B)
long key = intent.getLongExtra("PARAM_UPLOAD", -1); XY data = (XY)parameters.get(key);
该代码使用硬引用。为什么我应该在这里使用弱引用(如常见问题解答所建议的那样)?这种用于传递数据的使用模式是否可以,或者您是否更喜欢其他东西。