Bundle和Intent有什么区别?

时间:2014-04-08 10:53:49

标签: android android-intent bundle

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

Intent是一种被动数据结构,可将信息从一个Activity传送到另一个IntentputExtra()还能够以名称 - 值对的形式保存数据(通过onCreate())。

但是在覆盖Bundle方法时,我们传递onSaveInstanceState()作为参数,最终还以名称 - 值对的形式保存值,并且能够在Intent的帮助下存储信息。

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

更新

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

当我说'#34; Activity是一种被动数据结构,它将信息从一个Intent传送到另一个putExtra()时,我打算指出的是即使是Bundle也可以在{{1}}方法的帮助下携带信息(上下文和行动描述除外)。为什么我们需要使用{{1}}呢?

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

4 个答案:

答案 0 :(得分:7)

Intent 类的来源,两者之间确实没有区别。检查以下来自Intent类的代码:

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

    public Intent putExtras(Bundle extras) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putAll(extras);
        return this;
    }

所以我认为,只有差异是易用性 .. :)对于1st,你不需要明确地创建你的包。

答案 1 :(得分:6)

我认为你已经理解了Bundle是什么:一组键值对。

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

将意图视为一个包,其中还包含有关谁应该接收包含数据的信息,以及如何显示它。

答案 2 :(得分:3)

我真的不知道你从哪里得到Intent这个定义,但作为'意图'的定义

  

intent是要执行的操作的抽象描述。   它可以与startActivity一起使用来启动Activity,   broadcastIntent将其发送给任何感兴趣的BroadcastReceiver   组件,以及startService(Intent)或bindService(Intent,   ServiceConnection,int)与后台服务进行通信。

     

Intent提供了执行延迟运行时绑定的工具   不同应用程序中的代码之间。其最重要的用途   是在开展活动,在那里它可以被认为是   活动之间粘合。它基本上是一种被动数据结构   持有要执行的动作的抽象描述。

因此,Intent是一个链接到new(Activity,Service,BroadCastReceiver)

的动作

Intent中,您会找到附加内容

的定义
  

extras - 这是一个捆绑的任何附加信息。这可用于向组件提供扩展信息。例如,如果我们有一个发送电子邮件的动作,我们还可以在这里包含额外的数据来提供主题,正文等。

这意味着Intent中的Extras是A Bundle的对象

如您所述,转到Bundle它是从一个意图到另一个意图的数据的载体,并且是Key-Value变量的地图。

答案 3 :(得分:3)

Intent促进components之间的通信.Intent是在诸如activity之类的组件之间传递的消息。 可以使用 intent.putExtra(键,值) intent.putExtra(Bundle)

Intent intent = new Intent();

intent.setClass(this, Other_Activity.class);
// intent.putExtra(key,value)
intent.putExtra("EXTRA_ID", "SOME DATAS");
startActivity(intent);

使用Bundle:

Bundle bundle=new Bundle();
bundle.put(key,value);
intent.putExtra(bundle);
startActivity(intent);

在其他活动中调用该捆绑包:

Bundle extras=getIntent().getExtras();
extras.getString(key);