在我的android应用程序中我总是直接使用putExtra()
的函数Intent
类将任意数量的值传递给 newActivity
.
像这样:
Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);
我知道关于Bundle
在 Android 中,我看到人们正在使用Bundle
用于将值传递给 newActivity
.
像这样:
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个疑问。
我为什么要使用Bundle
如果我可以将值传递给 newActivity
直接将其放入Intent
?
使用有什么好处Bundle
而不是直接Intent
putExtra()
?
它没什么作用(如果有的话)。使用附加包的代码稍微重一些(它在任何实际应用中不会产生任何区别)并且更容易管理,更通用。
如果有一天您决定 - 在意图内发送信息之前 - 您想要将数据序列化到数据库 - 拥有一个可以序列化的包,添加到意图然后提供给 PendingBundle 会更干净 - 所有与一个物体。
[update]
澄清(因为其他一些答案)。
Extras is每个 Intent 可能携带(但不是必须)的附加捆绑包,因此在使用捆绑包或不使用捆绑包之间没有其他选择。无论哪种方式,您都在使用捆绑包。
第一次使用时putExtra
, a mExtras
Intent 中的bundle 被初始化,并且所有后续的putExtra 都被委托给它。您无法访问该捆绑包本身(这是设计使然,以避免某些类型的错误)。
放置额外内容does not将你的包放入 Intent 中。相反,它将其复制到当前意图包(或创建一个,如putExtra
)。这就是为什么它稍微重一些(你有两包而不是一包,并且要付出复制的代价)。
关键是 - 如果你使用putExtras
,您仍然无法访问意图中的真实包。但是 - 您有一份副本,可以用于您可能想用它做的任何其他事情。就像保留复制到另一个意图中一样(如果您发送了很多类似的意图)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)