首先,对于一些Android老手来说这个问题听起来真的很荒谬,但作为一个新手,我真的需要问这个问题:
Intent
是一种被动数据结构,可将信息从一个Activity
传送到另一个Intent
。 putExtra()
还能够以名称 - 值对的形式保存数据(通过onCreate()
)。
但是在覆盖Bundle
方法时,我们传递onSaveInstanceState()
作为参数,最终还以名称 - 值对的形式保存值,并且能够在Intent
的帮助下存储信息。
在这种情况下,为什么我们需要两者并区分两者?
更新
我想我已经让你们误解了我误解了Intent
是什么:
当我说'#34; Activity
是一种被动数据结构,它将信息从一个Intent
传送到另一个putExtra()
时,我打算指出的是即使是Bundle
也可以在{{1}}方法的帮助下携带信息(上下文和行动描述除外)。为什么我们需要使用{{1}}呢?
另外,请确保您在下面的评论中留下理由,以防您向下/向上投票。谢谢你的慷慨。
答案 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);