在Android中使用Bundle而不是直接Intent putExtra()的优点

时间:2013-03-06 09:44:57

标签: android android-intent android-activity bundle extra

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

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

我知道Android中的Bundle,我看到有人使用Bundle将值传递给新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);

此处我有两个疑问。
如果我可以将值Bundle直接传递给Activity,我为什么要使用Intent? 使用Bundle代替直接Intent putExtra()

有什么好处

4 个答案:

答案 0 :(得分:61)

它很少(如果有任何区别)。使用附加软件包的代码稍微重一些(在任何实际应用程序中都没有任何区别),并且更容易管理,更为通用。

如果有一天你决定 - 在意图中发送信息之前 - 你想要将数据序列化到数据库 - 那么拥有一个可以序列化,添加到意图然后提供给一个意图的包将会更清晰一些。 PendingBundle - 全部有一个对象。

<强> [更新]

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

额外 是每个Intent可能携带(但不必)的附加包,因此使用bundle或不使用它之间没有其他选择。你正在使用捆绑。

第一次使用putExtra时,会初始化Intent中的mExtras包,并将以下所有putExtra委托给它。您自己无法访问捆绑包(这是设计,以避免某些类型的错误)。

putExtras 将您的包放在Intent中。相反,它将其复制到当前意图包(或创建一个,与putExtra一样)。这就是为什么它稍微重一点(你有两个捆绑而不是一个,并付出复制的代价)。

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

答案 1 :(得分:16)

附加优势:将数据放入Bundle后,您可以通过多个意图发送相同的数据。 (只有在这种情况下,才会发送多个意图)。

答案 2 :(得分:6)

捆绑很酷,因为你可以更容易地隔离他们的创建/阅读,因此将处理捆绑包的代码与UI的代码分开。

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

答案 3 :(得分:5)

你可以参考this 还有this

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

根据我的知识,并没有任何重要的区别。