java - 传递对 Activity Intent 的引用

标签 java c# android xamarin xamarin.android

很长一段时间以来,我在将变量从一个 Activity 传递到另一个 Activity 时遇到了麻烦,而且我通常不得不解决一些非常丑陋的静态类 hack 来使其工作。

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

就像我说的,非常丑陋。并且没有“myActivity.StartActivity(new Activity);”这样的东西。 StartActivity 的所有重载都采用 Intent 或 typeof(MyOtherActivity)。

所以我的问题是,我是否完全误解了 Activity 的概念,或者我只是错过了一种向 Activity 传递参数的完全明显的方式?

@Edit:我想传递对对象的实际引用,而不是对象的简单副本,是因为我试图将 View 模型从覆盖的 Activity 向下传递到新的 Activity。当然,对此 View 模型所做的任何更改都应该反射(reflect)在父 Activity 上,这只有在两个 Activy 的 View 模型指向同一实例时才有可能。

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

最佳答案

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

这也是为什么不能传递对象引用的原因。当 Android 重新创建进程时,这些对象将不再存在。

另一点需要考虑的是,不同的 Activity 可能运行在不同的进程中。即使来自同一应用程序的 Activity 也可能在不同的进程中(如果 list 指定了这一点)。由于对象引用不能跨进程边界工作,这是您不能在 Intent 中传递对对象的引用的另一个原因。

关于java - 传递对 Activity Intent 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211449/

相关文章:

C# 9 - 使用 Entity Framework 更新记录的仅初始化属性

java - 如何解决Android中的静态 fragment 需求?

java - Amazon SES 自定义 header 列表-取消订阅不起作用

返回的 java 对象上的 JavaFX WebView 调用方法

java - 你能通过连接两个其他变量来创建一个唯一的变量名吗?

java - Apache Camel - UriEndpoint 缺少属性标题、语法的值

c# - c#中的密码生成器

c# - System.NotSupportedException 目前不支持方法 'System.Linq.Queryable.GroupBy' 的这种重载。

Android 应用程序内存不足错误,尝试使用 88kb 图像

android - 从服务下载文件(更新 UI)