如何在onNewIntent()中捕获新的Intent?

时间:2011-01-24 21:15:20

标签: android android-intent

我想将一个新的但不同的Intent传递给一个Activity。你如何区分新的Intent和之前的Intent? onNewIntent()中有什么样的代码?一个例子非常有用。

5 个答案:

答案 0 :(得分:81)

新意图是onNewIntent(Intent)的一部分。原始Intent仍可通过getIntent()获得。

您将所需的任何代码放入onNewIntent,以便使用新参数更新UI;可能与您在onCreate中所做的类似。

此外,您可能希望在setIntent(intent)中致电onNewIntent,以确保以后在活动生命周期内对getIntent()的来电获取最新的Intent数据。

答案 1 :(得分:21)

意图如何到达您的活动取决于launchMode(请参阅http://developer.android.com/guide/topics/manifest/activity-element.html#lmode处的launchmode文档)。

  • 对于launchmode“standard”(默认值),具有新意图的startActivity将导致onCreate具有该活动的新实例的意图。

  • 对于launchmodes“singleTop”和“singleTask”,具有新意图的startActivity将导致

a)具有该意图的onCreate活动的新实例(如果该活动未运行)[按照上述“标准”]或 b)对现有活动具有该意图的onNewIntent(如果该活动已经在运行)。

对于b),第二个意图在onNewIntent参数中可用。你用它做什么取决于你的应用程序。一些应用程序将忽略它,而其他应用程序将执行setIntent()并开始重新初始化/更新处理新意图。

答案 2 :(得分:12)

您的被叫活动 - 主要活动

public class MainActivity extends Activity
{
    public void onCreate(Bundle SavedInstanceState)
    {
    }

    @Override
    protected void onNewIntent(Intent intent) 
    {
        super.onNewIntent(intent);
        if(intent.getStringExtra("methodName").equals("myMethod"))
        {
            myMethod();
        }
    }

    public void myMethod()
    {
    }
}

您的通话活动

代码转到上一个意图

public class CallingActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        Intent i=new Intent(this,MainActivity.class);
        i.putExtra("methodName","myMethod");//goes to previous INtent
        startActivity(i);//will trigger only myMethod in MainActivity
    }
}

您的通话活动

代码使用这些意图启动新活动

public class CallingActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        Intent i=new Intent(this,MainActivity.class);
        startActivity(i);//will trigger New Activity i.e. MainActivity
    }
}

答案 3 :(得分:3)

答案 4 :(得分:0)

如果您不希望自己的活动在每个后续onResume()中重复使用新意图,我建议您将意图存储在实例字段中,而不是通过setIntent(intent)

这样,一旦消耗了意图而不丢弃原始启动意图,就可以将该实例字段重置为null。

我在这里回答的更多细节: https://stackoverflow.com/a/21261404/621690

Android框架工程师将

setIntent(Intent)描述为错误: https://groups.google.com/forum/#!topic/android-developers/vrLdM5mKeoY