我需要能够在我的应用程序中的多个活动中使用一个对象,并且它需要是同一个对象.做这个的最好方式是什么?
我已经尝试将对象设置为"公共静态",因此可以通过其他活动访问它,但由于某种原因,这并没有削减它.还有另一种方法吗?
在android.os.Message使用Bundle发送与它的sendMessage法.因此,有可能把HashMap一个Bundle?
我特别感兴趣的是官方android FAQ中的以下建议.
WeakReferences对象的HashMap
您还可以使用WeakReferences的HashMap到具有长键的对象.当活动想要将对象传递给另一个活动时,它只是将对象放入地图中,并通过意图附加功能将密钥(基于计数器或时间戳的唯一Long)发送给收件人活动.收件人活动使用此密钥检索对象
我还没有找到如何正确实现这一点的方法.我不确定为什么WeakReferences在这里是首选,为什么不使用硬引用.
我的实现(我想从活动A向服务B发送类XY的实例):
接收服务有一个静态的HashMap对象.
public static HashMap<Long, Object> parameters = new HashMap<Long, Object>();
Run Code Online (Sandbox Code Playgroud)发送部分的代码(活动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);
Run Code Online (Sandbox Code Playgroud)接收部分的代码(服务B)
long key = intent.getLongExtra("PARAM_UPLOAD", -1);
XY data = (XY)parameters.get(key);
Run Code Online (Sandbox Code Playgroud)代码使用硬引用.我为什么要在这里使用弱引用(如FAQ所提出的)?并且这样的使用模式可以传递数据,或者您更喜欢其他内容.