传递对Activity Intent的引用

Fal*_*til 4 c# java android xamarin.android xamarin

很长一段时间以来,我遇到了将变量从一个Activity传递到另一个Activity的麻烦,而且我通常不得不解决一些相当丑陋的Static-class-hacks才能使它工作.

通常我使用Activity的类型调用静态方法的行,以及Activity需要的变量.这些存储在静态变量中,并在所述活动的构造函数中检索.

就像我说的那样,非常难看.并且没有"myActivity.StartActivity(new Activity);"这样的东西.StartActivity的所有重载都采用Intent或typeof(MyOtherActivity).

所以我的问题是,我是否完全误解了活动的概念,或者我只是错过了一种将论据传递给他们的完全明显的方法?

@Edit:我想传递对象的实际引用而不是简单地传递对象副本的原因是因为我试图将一个View Model从一个覆盖的Activity传递到新的Activity.当然,对此视图模型所做的任何更改都应该反映在父活动上,只有当两个activy的viewmodel指向同一个实例时才能实现.

我正在使用Xamarin.Android编写应用程序,但C#和Java之间的代码几乎相同,所以这两种语言的答案都很好.

Dav*_*ser 7

问题是Android可以随时终止托管您应用的进程(如果它在后台).当用户返回到您的应用程序时,Android将创建一个新进程来托管您的应用程序,并将重新创建Activity堆栈顶部.为了做到这一点,Android保留了一个"序列化"的版本,Intent以便它可以重新创建它Intent以传递给它Activity.这就是为什么所有"额外"都Intent需要ParcelableSerializable.

这也是您无法传递对象引用的原因.当Android重新创建进程时,这些对象都不会再存在.

另一点需要考虑的是,不同的活动可能会在不同的流程中运行.即使来自同一应用程序的活动也可能在不同的进程中(如果清单指定了这一点).由于对象引用不能跨进程边界工作,因此这是您无法将引用传递给对象的另一个原因Intent.