在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()


它几乎没有(如果有任何区别)。 使用额外捆绑包的代码稍微重一些(它在任何实际应用中都不会有任何区别),并且稍微容易管理,更一般。

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

[更新]

澄清(由于一些其他答案)。

Extras 每个Intent可能携带(但不必)的附加捆绑包,因此在使用捆绑包或不使用捆绑包之间没有别的选择。 您正在使用捆绑包。

第一次使用putExtra ,Intent中的mExtras包将被初始化,并且下面的所有putExtra都将被委托给它。 捆绑本身对您来说是无法访问的(这是通过设计来避免某些类型的错误)。

putExtras 不会将您的包放入Intent中。 相反,它会将其复制到当前的意向包(或创建一个,就像putExtra )。 这就是为什么它稍重(你有两个捆绑而不是一个,并支付复印的价格)。

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


其他优点 :一旦数据放入Bundle中,您可以通过多种意图发送相同的数据。 (只有在这种情况下,才会发送多个意图)。


捆绑包很酷,因为您可以更轻松地隔离它们的创建/读取,因此将处理绑定的代码与UI代码分开。

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

链接地址: http://www.djcxy.com/p/26205.html

上一篇: Advantages of using Bundle instead of direct Intent putExtra() in Android

下一篇: How to maintain session in android?