在我的Android应用程序,我总是用直接putExtra()
的函数Intent
类来传递任何数量的价值新Activity
。
像这样:
Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);
我知道Bundle
在Android和我所看到的人都在用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
,如果我能值传递给新的Activity
,将其置于直接Intent
?
什么是使用的优点Bundle
,而不是直接的Intent
putExtra()
这让小(如果有差别)。 使用附加捆绑的代码是稍重(它不会让任何实际应用中的任何差异),并稍微更易于管理,更加普遍。
如果有一天你决定 - 意图内发送信息之前 - 要序列化的数据到数据库 - 这将是一个有点清洁有一个包,你可以序列化,增加意图再喂到PendingBundle - 所有同一个对象。
[更新]
澄清化(因为一些其他的答案)。
附加是一个额外的包,每个意图可能携带(但不必须),所以存在使用束或不使用它之间别无选择。 您使用的是捆绑两种方式。
您使用的第一次putExtra
,一个mExtras
内意图束被初始化,以下所有putExtra会委托给它。 束本身是无法访问你(这是由设计,以避免某种错误的)。
putExtras 不把你的包里面的意图。 相反,它把它复制到当前的意图束(或创建一个,与putExtra
)。 这就是为什么它稍重(你有两个包,而不是一个,并支付复印的价格)。
关键是-如果你使用putExtras
,你仍然无法访问的意图内真正的捆绑。 但是 - 你有任何其他你可能想用它做一个副本。 要借各地复制到另一个意图(如果你发送大量类似意图的)。
额外的好处 :一旦数据被放在一个包,你可以通过多种意图发送相同的数据。 (只有在情况下,多个意图是要被发送)。
捆绑是冷静,因为你可以隔离他们的创作/读取更加容易,因此分离代码处理来自用户界面的代码包。
在大多数情况下,这是没用,因为你要传输的数据尽可能小的量(通常只是一对夫妇的字符串,一ID ...)
你可以参考这也是这个 。
您可以在一个包中发送多个或一串数据,并通过意向发送。 或者另一种方式是添加PutExtra的多条语句()。
并没有按我的知识,任何这样的重要区别。