在Android中使用捆绑的,而不是直接故意putExtra()的优点(Advantages of

2019-07-21 01:45发布

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

Answer 1:

这让小(如果有差别)。 使用附加捆绑的代码是稍重(它不会让任何实际应用中的任何差异),并稍微更易于管理,更加普遍。

如果有一天你决定 - 意图内发送信息之前 - 要序列化的数据到数据库 - 这将是一个有点清洁有一个包,你可以序列化,增加意图再喂到PendingBundle - 所有同一个对象。

[更新]

澄清化(因为一些其他的答案)。

附加一个额外的包,每个意图可能携带(但不必须),所以存在使用束或不使用它之间别无选择。 您使用的是捆绑两种方式。

您使用的第一次putExtra ,一个mExtras内意图束被初始化,以下所有putExtra会委托给它。 束本身是无法访问你(这是由设计,以避免某种错误的)。

putExtras 把你的包里面的意图。 相反,它把它复制到当前的意图束(或创建一个,与putExtra )。 这就是为什么它稍重(你有两个包,而不是一个,并支付复印的价格)。

关键是-如果你使用putExtras ,你仍然无法访问的意图内真正的捆绑。 但是 - 你有任何其他你可能想用它做一个副本。 要借各地复制到另一个意图(如果你发送大量类似意图的)。



Answer 2:

额外的好处 :一旦数据被放在一个包,你可以通过多种意图发送相同的数据。 (只有在情况下,多个意图是要被发送)。



Answer 3:

捆绑是冷静,因为你可以隔离他们的创作/读取更加容易,因此分离代码处理来自用户界面的代码包。

在大多数情况下,这是没用,因为你要传输的数据尽可能小的量(通常只是一对夫妇的字符串,一ID ...)



Answer 4:

你可以参考这也是这个 。

您可以在一个包中发送多个或一串数据,并通过意向发送。 或者另一种方式是添加PutExtra的多条语句()。

并没有按我的知识,任何这样的重要区别。



文章来源: Advantages of using Bundle instead of direct Intent putExtra() in Android