在android中的意图中的对象的浅拷贝

时间:2010-12-26 22:24:58

标签: java android android-activity parcelable shallow-copy

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

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

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

2 个答案:

答案 0 :(得分:1)

发送意图时,意图和与之关联的所有数据必须跨进程边界进行封送。发生这种情况的唯一方法是对象是否可以分配。

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

但是,我对此类方法的唯一关注是,您可能会发送一个意图,然后该过程在新活动开始之前就会消失。然后为新意图重新启动进程,但是您在地图中存储的数据显然已经消失。我猜这可能是非常罕见的事情。

答案 1 :(得分:1)

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