Bundle和Intent有什么区别?

ika*_*k90 16 android bundle android-intent

首先,对于一些Android老手而言,这个问题可能听起来真的很荒谬,但作为新手,我真的需要问这个问题:

An Intent是一种被动数据结构,可以将信息从一个Activity传递到另一个.An Intent还能够以名称 - 值对(via putExtra())的形式保存数据.

但是在覆盖onCreate()方法的同时,我们将a Bundle作为参数传递,最终还以名称 - 值对的形式保存值,并且能够借助于存储信息onSaveInstanceState().

在这种情况下,为什么我们需要两者并区分两者?

更新

我想我已经让你们误解了我误解了什么Intent是:

当我说" Intent一个被动数据结构将信息从一个Activity传递到另一个"时,我想指出的是即使是一个Intent可以携带借助putExtra()方法获取信息(上下文和动作描述除外).为什么我们需要使用Bundle呢?

另外,请确保您在下面的评论中留下理由,以防您向下/向上投票.谢谢你的慷慨.

Far*_*han 9

Intent类的来源来看,两者之间确实没有区别.从Intent类中检查以下代码:

    public Intent putExtra(String name, String value) {
       if (mExtras == null) {
           mExtras = new Bundle();
       }
       mExtras.putString(name, value);
       return this;
    }
Run Code Online (Sandbox Code Playgroud)

    public Intent putExtras(Bundle extras) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putAll(extras);
        return this;
    }
Run Code Online (Sandbox Code Playgroud)

所以我认为,唯一不同的是易用性 .. :)对于1st,你不需要明确地创建你的包.


FD_*_*FD_ 7

我想你已经理解了它Bundle是什么:一组键值对.

但是,意图更多.它包含有关应执行的操作的信息.这个新操作由它可以用于的动作以及它应该显示/编辑/添加的数据来定义.系统使用此信息为请求的操作查找合适的应用程序组件(活动/广播/服务).

将Intent视为捆绑包,其中还包含有关谁应该接收包含数据以及应如何呈现的信息.

  • 因为有时需要一组没有预定义含义的键值对,所以Intent的字段具有.你经常需要某种类型的字典,它与以任何方式启动动作无关. (3认同)
  • 更新了问题。抱歉,之前的描述不正确。来到您的答案,但这就是我要问的问题-“当我们已经具有与Intent相同的功能时,为什么我们需要一个Bundle?” (2认同)