在Android中使用Bundle代替直接Intent putExtra()的优点
在我的android应用程序中,我总是使用Intent
类的putExtra()
函数将任意数量的值传递给新的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);
这里我有2个疑问。
为什么我应该使用Bundle
如果我可以通过将值直接传递给Intent
来将值传递给新的Activity
?
使用Bundle
而不是直接的Intent
putExtra()
什么putExtra()
?
它几乎没有(如果有任何区别)。 使用额外捆绑的代码稍微重一些(在任何实际的应用程序中都不会有任何区别),并且更容易pipe理,更一般。
如果有一天你决定 – 在发送信息的意图之前 – 你想序列化数据到数据库 – 有一个可以序列化,添加到一个意图,然后饲料到一个PendingBundle的捆绑 – 会更清洁一点 – 所有与一个对象。
[更新]
澄清(由于一些其他的答案)。
额外是一个额外的捆绑,每个意图可能携带(但不必),所以没有其他select之间使用捆绑或不使用它。 你正在使用一种捆绑方式。
第一次使用putExtra
,Intent中的mExtras
包被初始化,并且下面的所有putExtra被委托给它。 捆绑本身是不可访问的(这是devise,以避免某些types的错误)。
putExtras 不会把你的包放入Intent中。 而是将其复制到当前的意图包(或者像putExtra
一样创build一个)。 这就是为什么它稍重(你有两个捆绑,而不是一个,并支付复印的价格)。
关键是 – 如果你使用putExtras
,你仍然不能访问intent中的真正的bundle。 但是 – 你有任何你可能想要做的副本。 像保持复制到另一个意图(如果你发送了很多类似的意图)。
额外的好处 :一旦数据被放入一个Bundle,你可以通过多个意图发送相同的数据。 (只有在这种情况下,才会发送多个意图)。
包很酷,因为你可以更容易地隔离它们的创build/读取,因此将处理包的代码与UI的代码分开。
在大多数情况下,这是无用的,因为你会想传输尽可能less的数据量(通常只是几个string,一个ID …)
你可以参考这个也是这个 。
您可以在一个包中发送多个或一堆数据并通过Intent发送。 或者另一种方式是添加PutExtra()的多个语句。
据我所知,没有任何重要的差别。