在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