2

我有一些对象想通过意图传递给其他活动。但是,它们只需要是另一个对象的浅拷贝,因为它们只会被读取(即使它们要被修改,我也希望它们在原始活动中被修改),所以没有意义使对象可序列化,也因为并非对象中的所有字段都是可序列化的,我什至做不到。

此外,似乎使其可打包会遇到同样的问题。当然,似乎我可以在其中添加一些字段作为活动对象,但我不能让整个事情只是一个浅拷贝。

那么有什么方法可以在意图中制作对象的浅表副本,或者以任何其他方式将数据的浅表副本传递给另一个活动,就像您通常在 java 中传递参数一样?谢谢你。

4

2 回答 2

1

当您发送一个意图时,该意图和与之关联的所有数据都必须跨流程边界进行编组。发生这种情况的唯一方法是对象是可包裹的。

但是,如果发送新 Intent 的代码与 Intent 启动的 Activity 处于同一进程中,您可以执行诸如创建静态地图之类的操作来保存要发送到新 Activity 的数据,然后将密钥传递给意图中的该数据,新活动可以使用该密钥从地图中查找数据。

但是,我对这种方法的唯一担忧是,您可能会发送一个意图,然后该流程在新活动开始之前就终止了。然后为新的意图重新启动该过程,但是您存储在地图中的数据显然已经消失了。我猜想这可能是非常罕见的情况。

于 2010-12-27T03:23:13.013 回答
1

JesusFreke 是正确的,您不能通过 Intent 将引用(指针)传递给对象。Intent 是序列化的数据,而不是对该数据的引用。但是,我建议不要使用静态映射技术,因为它通常是内存泄漏的来源。相反,我建议创建一个 android.app.Application 的子类,并使用它来存储对您需要跨活动共享的任何数据结构的引用。

于 2010-12-27T05:14:34.603 回答