82

在我的 android 应用程序中,我总是使用类的直接putExtra()函数Intent将任意数量的值传递给 new Activity
像这样:

Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);

我知道Bundle在 Android 中,并且我看到人们正在使用Bundle将值传递给 new Activity
像这样:

Intent intent = new Intent(this, MyActivity.class);
Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
intent.putExtras(extras);
startActivity(intent);

在这里我有2个疑问。如果我可以通过直接将值传递给 new ,我
为什么要使用它? 使用而不是直接有什么好处?BundleActivityIntent
BundleIntent putExtra()

4

4 回答 4

67

它几乎没有(如果有的话)。使用附加包的代码稍微重一些(在任何实际应用中都不会产生任何影响),并且更容易管理,更通用。

如果有一天你决定 - 在意图中发送信息之前 - 你想将数据序列化到数据库 - 拥有一个可以序列化的包,添加到意图然后馈送到 PendingBundle 会更干净 - 所有与一个对象。

[更新]

澄清(因为其他一些答案)。

Extras每个 Intent 可能携带(但不是必须)的附加捆绑包,因此在使用捆绑包或不使用捆绑包之间没有其他选择。无论哪种方式,您都在使用捆绑包。

第一次使用时putExtra,Intent 中的一个mExtras包被初始化,并且所有后续的 putExtra 都被委托给它。您无法访问捆绑包本身(这是设计使然,以避免某些类型的错误)。

putExtras不会将您的捆绑包放入 Intent。相反,它将其复制到当前意图包(或创建一个,如putExtra)。这就是它稍重的原因(您有两个捆绑包而不是一个捆绑包并支付复制的代价)。

关键是 - 如果你使用putExtras,你仍然无法访问意图中的真实包。但是 - 你有一份你可能想用它做的任何事情的副本。就像保留复制到另一个意图(如果您发送很多类似的意图)。

于 2013-03-06T09:52:38.117 回答
17

附加优势:一旦将数据放入 Bundle 中,您就可以通过多个意图发送相同的数据。(仅在这种情况下,要发送多个意图)。

于 2015-01-20T10:42:39.380 回答
6

Bundles 很酷,因为您可以更轻松地隔离它们的创建/读取,从而将处理 bundles 的代码与 UI 的代码分开。

在大多数情况下,这是无用的,因为您希望传输尽可能少的数据(通常只是几个字符串,一个 id ...)

于 2013-03-06T09:50:50.760 回答
5

您可以参考Intent and Bundle Relation (Stackoverflow) 以及捆绑在 Android 程序中的重要性 (Stackoverflow)

您可以在一个捆绑包中发送多个或一堆数据并通过 Intent 发送。或者另一种方法是添加多个 PutExtra() 语句。

据我所知,没有任何如此重要的区别。

于 2013-03-06T12:22:10.033 回答