【问题标题】:Advantages of using Bundle instead of direct Intent putExtra() in Android在 Android 中使用 Bundle 而不是直接 Intent putExtra() 的优点
【发布时间】:2013-02-21 00:49:38
【问题描述】:

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

在这里我有两个疑问。
如果我可以通过将值直接传递给 Intent 来将值传递给新的 Activity,我为什么要使用 Bundle
Bundle代替直接IntentputExtra()有什么好处?

【问题讨论】:

    标签: android android-intent android-activity bundle extra


    【解决方案1】:

    影响不大(如果有区别的话)。使用附加包的代码稍微重一些(在任何实际应用中都不会产生任何影响),并且更容易管理,更通用。

    如果有一天您决定 - 在意图中发送信息之前 - 您希望将数据序列化到数据库 - 拥有一个可以序列化的捆绑包,添加到意图然后馈送到PendingBundle - 一个对象。

    [更新]

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

    Extras 每个 Intent 可能携带(但并非必须)的附加捆绑包,因此在使用捆绑包或不使用捆绑包之间没有其他选择。无论哪种方式,您都在使用捆绑包。

    第一次使用putExtra 时,Intent 内的mExtras 捆绑包被初始化,随后所有的 putExtra 都被委托给它。您无法访问捆绑包本身(这是设计使然,以避免某些类型的错误)。

    putExtras 不会将您的捆绑包放入 Intent。相反,它将其复制到当前意图包(或创建一个,如putExtra)。这就是它稍微重一些的原因(您有两个捆绑包而不是一个捆绑包并支付复制的代价)。

    关键是 - 如果您使用 putExtras,您仍然无法访问意图中的真实包。但是 - 你有一份你可能想做的任何事情的副本。比如不停地复制到另一个意图中(如果你发送了很多类似的意图)。

    【讨论】:

    • 告诉我是否使用类似这样的代码 Intent intent = new Intent(this, MyActivity.class);意图.putExtra(ID_EXTRA1,“1”);捆绑附加服务 = 新捆绑(); extras.putString("EXTRA_USERNAME","my_username"); extras.putString("EXTRA_PASSWORD","my_password");意图.putExtras(附加);开始活动(意图);如何访问 ID_EXTRA1
    • @VishalVijay 您可以通过调用 getExtras 获得额外捆绑包的副本(不是原始捆绑包)。小心,它可能会返回 null。
    • 所以我可以从新的活动绑定中获取 ID_EXTRA1 和 extras(bundle)。
    • 对不起,我无法从这个问题的答案中完全看出,但是,如果我的意图仅仅是为了编辑 ValueObjects 数据,我所做的就是传递从静态数据资源中使用哪个 VO。既然这是强制性的,应该在startActivity(intent, options)intent.putExtra() 中完成吗?我知道两者都可以做到,但我只是在考虑最佳实践?我通常不会触摸传递给 onCreate 的 Bundle,但我缺乏经验,所以寻求意见。
    • putExtras(bundle) 不会委托给原始意图。最初的意图有一个额外的包。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      Bundle 很酷,因为您可以更轻松地隔离它们的创建/读取,从而将处理 bundle 的代码与 UI 的代码分开。

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

      【讨论】:

        【解决方案4】:

        您可以参考Intent and Bundle Relation (Stackoverflow) 还有What is the importance of bundle in an Android program (Stackoverflow)

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多