Android 使用自定义参数调用活动

Android 使用自定义参数调用活动,android,android-activity,arguments,Android,Android Activity,Arguments,我想问一下如何调用带有参数的活动。我看到过很多关于它的例子。但我想问一个解释,为什么创建(调用)带有自定义参数的活动“不容易”或“不简单” 我看过很多像和其他的帖子。人们传递字符串,但不传递自定义对象。是的,他们通过实现可序列化和可分包的方法来传递自定义对象,但这似乎并不高效(我可能错了,因为我没有看到它)。对于final声明的类,需要做的工作甚至更多 当我们用putExtras(字符串名称、字符串值)传递字符串时,为什么像putExtras(字符串名称、对象对象)这样的函数没有定义?通过它传递

我想问一下如何调用带有参数的活动。我看到过很多关于它的例子。但我想问一个解释,为什么创建(调用)带有自定义参数的活动“不容易”或“不简单”

我看过很多像和其他的帖子。人们传递字符串,但不传递自定义对象。是的,他们通过实现可序列化和可分包的方法来传递自定义对象,但这似乎并不高效(我可能错了,因为我没有看到它)。对于final声明的类,需要做的工作甚至更多

当我们用putExtras(字符串名称、字符串值)传递字符串时,为什么像putExtras(字符串名称、对象对象)这样的函数没有定义?通过它传递任何自定义对象不是更容易吗

关于这一过程的复杂性,博文中给出了解释

因为应用程序处于不同的进程中,并且具有独立的内存 地址空间,您不能只将指针(引用)发送到内存块 在您的流程中,并期望它在另一个流程中可用

但是,尽管如此,我还是找不到一个理由来满足我,或者帮助我认识到我没有看到的东西。好吧,假设应用程序处于不同的进程中,它们的内存空间也不同。那么,我们是在复制要传递到另一个活动的内存空间的数据吗?或者至少,属于同一应用程序的活动(我相信应用程序中的活动有一些与应用程序相同的地址)不应该有公共内存空间,以便它们可以轻松地共享或传递数据吗

我只是想澄清一下。我知道Android不应该与Windows开发相比较,但我觉得如果事情简单一些,它会更好。我知道我遗漏了一些东西,否则大家都知道越简单越好。但是,什么是阻止传递更容易的东西呢

谢谢

为什么像putExtras(字符串名、对象)这样的函数没有定义?通过它传递任何自定义对象不是更容易吗

因为
startActivity()
总是跨越进程边界,因此传递的任何内容都需要转换为字节数组进行传输

那么,我们是在复制要传递到另一个活动的内存空间的数据吗

我们正在进程之间复制数据

或者至少,属于同一应用程序的活动(我相信应用程序中的活动有一些与应用程序相同的地址)不应该有公共内存空间,以便它们可以轻松地共享或传递数据吗

除了
startActivity()
的主要工作不是由应用程序进程完成,而是由核心操作系统进程完成

我知道Android不应该与Windows开发相比较,但我觉得如果事情简单一些,它会更好


一个更好的类比是Web开发,在Web开发中,您不在客户端和服务器之间传递对象,而是从字符串或字节数组封送数据。

正如您自己所了解的,您通过一个包在活动之间传递数据,如下所示:

Intent intent = new Intent(context, MyActivity.class);
intent.putExtra(key, "some string");
intent.putExtra(key, true);
intent.putExtra(key, 1.5f);
事实上,意图和捆绑包是一种非常通用的方式,不仅可以在您自己的活动之间传递数据,还可以向其他应用程序传递数据,例如启动消息传递客户端并提供预定义的主题和主体。这是非常强大的,但也是一个限制。如果你想通过我的课程怎么办?您不能这样做,因为意图是执行操作的抽象方式,而不仅仅是在您自己的应用程序中。有人可能会说,谷歌应该为你自己的活动之间的意图破例,但我真的不认为这是一个很大的问题


正如您自己所说,您可以使用serializable接口序列化对象,但也可以将其序列化为JSON对象。我还想说,如果您需要在活动之间传递复杂的数据结构,那么您确实需要重新考虑您的设计。您可能应该有一些全局应用程序状态(在您的应用程序或类似类中),并且只传递ID、密钥或可用于从应用程序状态查找数据的类似项。

数据是否真的传递给正在复制而未引用的活动?我认为这就是为什么Android不允许传递对象。所以我想在活动之间传递图像是不可能的。。仍在试图理解“为什么”。@OmerHalit:“数据是否真的传递给被复制而未被引用的活动?”——是的。“因此,我想在活动之间传递图像是不可能的”——不能通过
Intent
extra,除非它们非常小。“仍在试图理解“为什么”——这就是他们选择编写操作系统的原因。“这就是他们选择编写操作系统的原因”——我需要找出他们选择这种方式的原因。如果他们选择这样做,肯定会有好处,否则他们就是错的。只是我需要了解架构,这样我才知道我在做什么,但这需要我很长时间。。在web开发中,我理解这一点,因为用户和源不在同一个位置,但在Android中是这样的。这在iOS开发中是相同的还是更简单?我同意这一点,并且只能得出结论,Android是以一种相当愚蠢的方式构建的。强制简单对象可序列化,只是将其从一个活动传递到另一个活动,这只是。。。疯了。当然,Commonware解释了原因,但如果我是安卓操作系统的设计师,我会想出这样一个主意,我会辞掉我的工作,禁止自己再编码;-)