1

我想问一下关于使用参数调用 Activity 的问题。我看过很多关于它的例子。但是我想问一个解释,为什么用自定义参数创建(调用)一个活动在某种程度上“不容易”“不简单” 。

我看过很多这样的帖子其他帖子。人们传递字符串但不传递自定义对象。是的,他们通过实现可序列化和可解析的方法来传递自定义对象,但这似乎效率不高(我可能错了,因为没见过)。对于最终声明的类,要做的工作就更多了。

当我们用putExtras(String name, String value)传递 String 时,为什么没有定义像putExtras(String name, Object object)这样的函数?这样传递任何自定义对象不是更容易吗?

关于过程的复杂性,这里的帖子中给出了解释

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

但是,我仍然找不到让我满意或帮助我意识到我没有看到的原因。好的,假设应用程序处于不同的进程中,并且它们的内存空间不同。那么我们是否将要传递的数据复制到另一个活动的内存空间中?或者至少,不应该属于同一个应用程序的活动(我相信应用程序中的活动有一些共同的地址到它的应用程序)具有公共内存空间,以便他们可以轻松地共享或传递数据?

我只是想澄清一下自己。我知道 Android 不应该与 Windows 开发相比较,但感觉如果事情更简单的话会更好。我知道我在这方面遗漏了一些东西,否则每个人都知道更简单会更好。但是是什么阻止了事情的顺利通过?

谢谢。

4

2 回答 2

0

为什么没有定义像 putExtras(String name, Object object) 这样的函数?这样传递任何自定义对象不是更容易吗?

因为startActivity()总是跨越进程边界,因此无论传递什么都需要转换为字节数组以进行传输。

那么我们是否将要传递的数据复制到另一个活动的内存空间中?

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

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

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

我知道 Android 不应该与 Windows 开发相比较,但感觉如果事情更简单的话会更好。

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

于 2013-04-29T20:10:26.723 回答
0

就像您已经发现自己通过 Bundle 在活动之间传递数据一样,如下所示:

Intent intent = new Intent(context, MyActivity.class);
intent.putExtra(key, "some string");
intent.putExtra(key, true);
intent.putExtra(key, 1.5f);

问题是 Intents 和 Bundles 是一种非常通用的方式,不仅可以在您自己的活动之间传递数据,还可以将数据传递给其他应用程序,例如通过启动消息传递客户端并提供预定义的主题和正文。这是非常强大的,但它也是一个约束。如果你想通过 MyFooClass 怎么办?好吧,您不能这样做,因为 Intent 是一种执行操作的抽象方式,不仅在您自己的应用程序中。有人可能会争辩说,谷歌应该为你自己的活动之间的意图破例,但我真的不认为这是一个很大的问题。

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

于 2013-04-29T20:15:33.263 回答