Android 使用intent通过引用传递参数

Android 使用intent通过引用传递参数,android,reference,Android,Reference,使用itent.putExtra复制我的对象。因此,在接收此itent的活动上对该对象所做的更改不会反映在其他活动上 在我的情况下,将很好的参考这个对象,而不是一个副本,这是可能的 ps:我知道我可以使用onActivityResult检索对对象所做的更改,但就我而言,对对象所做的更改需要在活动结束之前完成 另一种方法是:从activity1(我正在使用MyApplication)设置对公共属性的引用。activity2知道通过getter在何处找到该引用,并将使用它。在完成/每次可以在acti

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

在我的情况下,将很好的参考这个对象,而不是一个副本,这是可能的


ps:我知道我可以使用
onActivityResult
检索对对象所做的更改,但就我而言,对对象所做的更改需要在活动结束之前完成

另一种方法是:从activity1(我正在使用MyApplication)设置对公共属性的引用。activity2知道通过getter在何处找到该引用,并将使用它。在完成/每次可以在activity1中进行引用时,确定是否要修改activity2中的属性


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

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

public class Globals {
     public static MyObject myObject;
}
doSomethingWith(Globals.myObject);
现在,在包含对象的代码中,您只需执行以下操作:

Globals.myObject = object;
在新活动中,您可以得到如下结果:

public class Globals {
     public static MyObject myObject;
}
doSomethingWith(Globals.myObject);
话虽如此,您仍需注意以下几点:


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

您应该使用一个应用程序类,您可以使用getApplicationContext()方法获取对该类的引用

总之,创建一个应用程序类,您可以从应用程序中的任何类引用该类,然后您可以引用该类的本地变量

这是一个很好的问题:

将其设置为您的对象静态,以便在应用程序位于后台时防止对象丢失,我可以在我的活动上创建一个静态变量来保存该值吗?比如:holdThis=Globals.myObject;这不是一个很好的解决方案。您应该为此使用应用程序类(基本上是一个可以在应用程序中的任何位置访问的全局单例)@Booger:我刚刚提供了我自己的观点。应用程序类也是一个很好的解决方案,可以全局共享数据,但这里也会有内存泄漏问题。数据可共享给整个应用程序。@SahilMahajanMj足够公平。您的解决方案是可行的,但我认为标准解决方案应该是应用程序类。您是对的,开发人员需要小心管理内存(并在必要时清除陈旧数据)。