3

使用itent.putExtra复制我的对象。因此,在接收该项目的活动上对该对象所做的更改不会反映其他活动。

在我的情况下,最好参考这个对象而不是副本,这可能吗?

ps:我知道我可以onActivityResult用来检索对对象所做的更改,但在我的情况下,对对象所做的更改需要在活动结束之前完成。

4

3 回答 3

0

另一种方法是:设置对来自 activity1 的公共属性的引用(我正在使用 MyApplication)。activity2 知道在哪里可以通过 getter 找到该引用,并将使用它。决定是否要修改activity2中的属性,完成后/每次都可以在activity1中有引用。

这种方式也不需要序列化/反序列化对象。(也提高了性能)

于 2012-12-27T13:21:11.153 回答
0

您可以将对象的引用存储在静态成员变量中,如下所示:

public class Globals {
     public static MyObject myObject;
}

现在,在包含该对象的代码中,您只需执行以下操作:

Globals.myObject = object;

在新活动中,您可以像这样获得它:

doSomethingWith(Globals.myObject);

现在,话虽如此,您需要注意以下几点:

如果您的应用程序几乎随时都在后台,Android 可以终止您的进程。当用户然后返回到您的应用程序时,Android 将为您的应用程序创建一个新进程,然后它将仅重新创建位于活动堆栈顶部的活动(即:正在显示的活动)。在这种情况下,新创建的活动将无法通过访问来获取 iobject,Globals.myObject因为该进程是新创建的并且该成员变量为空。

于 2012-12-27T13:24:53.667 回答
0

您应该使用 Application 类,您可以使用 getApplicationContext() 方法获得对它的引用。

最重要的是,创建一个应用程序类,您将能够从应用程序中的任何类引用它,然后您可以引用该类的本地变量。

这是一个很好的 SO 问题: Using the Android Application class to persist data

于 2012-12-27T13:30:38.270 回答