在Android中使用Bundle而不是直接Intent putExtra()的优点

Vis*_*jay 73 android bundle android-intent extra android-activity

在我的android应用程序中,我总是使用类的直接putExtra()函数Intent将任意数量的值传递给new Activity.
像这样:

Intent i = new Intent(this, MyActivity.class);
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

在这里,我有两个疑问.如果我可以直接将值传递给new ,我
为什么要使用? 使用而不是直接使用有什么好处?BundleActivityIntent
BundleIntent putExtra()

fdr*_*ger 62

它几乎没有(如果有任何区别).使用附加软件包的代码稍微重一些(在任何实际应用程序中都没有任何区别),并且更容易管理,更一般.

如果有一天你决定 - 在意图中发送信息之前 - 你想要将数据序列化到数据库 - 拥有一个可以序列化,添加到意图然后提供给PendingBundle的捆绑包会更加清晰 - 所有有一个对象.

[更新]

澄清(因为其他一些答案).

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

第一次使用时putExtra,mExtrasIntent中的bundle被初始化,并且所有以下putExtra都被委托给它.您自己无法访问捆绑包(这是设计,以避免某些类型的错误).

putExtras 不会将您的包放在Intent中.相反,它将其复制到当前意图包(或创建一个,如同putExtra).这就是为什么它稍微重一点(你有两个捆绑而不是一个并付出复制的代价).

关键是 - 如果你使用putExtras,你仍然无法访问意图内的真正的捆绑.但是 - 你有一份副本可以用来做任何你想做的事情.喜欢保持复制到另一个意图(如果你发送了很多类似的意图).


van*_*d69 16

附加优势:将数据放入Bundle后,您可以通过多个意图发送相同的数据.(仅在这种情况下,将发送多个意图).


njz*_*zk2 6

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

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


Mah*_*tha 5

您可以参考这个 ,也可以参考这个

您可以在一个包中发送多个或一堆数据,然后通过Intent发送。或另一种方法是添加PutExtra()的多个语句。

据我所知,没有任何重要的区别。