2016-06-21 62 views
1

我的应用应在广播接收机操作后打开。但是,如果我的应用程序在当前时刻打开,我需要删除以前的MainActivity并创建一个新的MainActivity。如何从广播接收器启动MainActivity并在活动之前开始删除以前的MainActivity?2广播接收机后的主要活动

广播:

Intent initialIntent = context.getPackageManager().getLaunchIntentForPackage("com.cc.dd"); 
    initialIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    initialIntent.putExtra(Constants.NUMBER,getIncomingNumber(mCallState)); 
    context.startActivity(initialIntent); 

我试图用标志,但我有奇怪的日志:

d/CallReceiver:主营:[振铃]
d/CallReceiver:主营:[来电true]
D/MainActivity:main:[ON_PAUSE]
D/MainActivity:main:[ON_CREATE]
D/MainActivity:main:[ON_START]
d/MainActivity:主营:[ON_RESUME]

我看到在MainActivity以前的版本去的onPause和新版本的开始。为什么以前的版本不会删除?

+1

您可以在清单中的activity标签中添加'android:launchMode =“singleInstance”''。这确保您的活动只能打开一次.... – Opiatefuchs

+0

您面临的问题是什么 –

+0

因此,如果您想杀死所有以前的活动,只需按照这些方法。在API级别11或更高版本中,使用Intent上的FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK标志清除所有活动堆栈。 initialint.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent。FLAG_ACTIVITY_NEW_TASK); initialIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent。FLAG_ACTIVITY_NEW_TASK); 另一种方式是android:launchMode =“singleInstance”Opiatefuchs如何说。 – YLS

回答

3

如果您想结束活动的生命周期,则需要调用finish()。下面的代码只需重新启动的电流活动:

Intent intent = getIntent(); 
finish(); 
startActivity(intent); 

Intent intent = new Intent(YourActivity.this,YourActivity.class); 
startActivity(intent); 
finish(); 

参考文献:

0

我认为您不能删除以前的活动。您可以为您的活动添加标记singleInstance

1

您可以简单地添加:

android:launchMode = "singleInstance" 

到你的活动标签清单中。这可以确保您的活动只能打开一次。例如:

<activity 
android:name=".YourActivity" 
android:label="@string/your_activity_name" 
android:launchMode = "singleInstance" />