putExtra()如何工作?它的参数如何工作?这两个参数意味着什么?

时间:2014-06-15 19:18:16

标签: android android-intent

我一直在尝试Android开发,并继续使用http://developer.android.com/给出的指南,我遇到了putExtra(),并想知道是否有人可以向我解释这个功能的作用是什么?以下代码如何工作?

发送:

Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);

接收:

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

这个代码中的2个函数getStringExtra和putExtra是如何工作的?

2 个答案:

答案 0 :(得分:2)

Intent intent = new Intent(this, DisplayMessageActivity.class); // sets target activity
EditText editText = (EditText) findViewById(R.id.edit_message); // finds edit text 
String message = editText.getText().toString(); // pull edit text content
intent.putExtra(EXTRA_MESSAGE, message); // shoves it in intent object

让我们说这是活动A,你的DisplayMessageActivity =活动B

在这种情况下,您从活动A获取编辑文本内容,并使用Intent对象将其内容传递给活动B.活动B,对值感兴趣必须将它从intent对象中拉出来,所以它通常会在onCreate()中执行以下操作:

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

这通常是快乐但常见的情况。

但是,如果活动B已存在于后台堆栈中,并且活动A想要清除后台堆栈以再次到达活动B,则活动B将在其onNewIntent(Intent theNewIntent)中提供新意图方法,您必须在活动B中覆盖以查看此新意图。否则你将被困在处理活动B最初收到的原始意图。

<强>已更新

听起来您对意图的内部感兴趣,以及如何获得意图的“EXTRA_MESSAGE”部分。意图存储键值对,因此如果您想获得关键部分something like the following would work

for (String key : bundle.keySet()) {
    Object value = bundle.get(key);
    Log.d(TAG, String.format("%s %s (%s)", key,  
        value.toString(), value.getClass().getName()));
}

内部的快速概述是Intents使用Android的IPC(进程间通信)。本质上,OS友好的唯一数据类型是原始类型(int,long,float,boolean等),这就是putExtra()允许您仅存储基元的原因。但是,putExtra()也容忍parcelables,并且任何将自身定义为Parcelable的对象基本上定义了Java对象如何逐渐渗透到其原语,允许意图再次处理这些友好的数据类型,所以没有魔法。这很重要,因为Intents充当Binder层的包装器。 Binder层是Intent对象的底层结构,并且此实现位于Android的本机层(c / c ++部分)中。实际上,本机层处理编组/解组回到java层,其中Activity B获取数据。

I realize this simplification might be skipping too many details, so reference this pdf for better understanding.

答案 1 :(得分:0)

如果没有弄错它只是键值对https://searchenterprisedesktop.techtarget.com/definition/key-value-pair 。这只是表明这个id(密钥)是2(值)。从另一个活动中,您可以通过密钥(id)获得价值发现,即

活动B. Intent intent = getIntent();

String id = intent.getStringExtra(&#34; id&#34;);

请参阅How do I get extra data from intent on Android?