启动新活动时删除旧活动实例

时间:2015-09-06 17:59:02

标签: android android-activity

我希望在创建新实例(具有相同活动)时删除/删除旧活动实例,但是我需要在堆栈中维护所有其他活动(因此FLAG_ACTIVITY_CLEAR_TOP不足以满足要求) )。

E.g。说我有活动A,B& C。 我开始:A - > B - > C - > B. 在第二个B活动开始时,我需要删除现有的B活动。 因此我现在有:A - > C - > B跑...

任何帮助表示感谢。

4 个答案:

答案 0 :(得分:12)

我可以通过覆盖onNewIntent

来做到这一点
    @Override
protected void onNewIntent(Intent intent) {


        Bundle extras = intent.getExtras();
        Intent msgIntent = new Intent(this, MyActivity.class);
        msgIntent.putExtras(extras);
        startActivity(msgIntent);
        finish();
        return;

    super.onNewIntent(intent);
}

使活动单一任务

 <activity
        android:name=".MyActivity"
        android:launchMode="singleTask" >
    </activity>

答案 1 :(得分:10)

您可以使用Intent标志删除之前的任务。希望这会有所帮助。

Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

此标志将导致在活动开始之前清除与活动关联的任何现有任务。也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成。

答案 2 :(得分:8)

似乎删除活动并不像我想象的那么容易,因此不是一个完整的答案,但我会选择使用FLAG_ACTIVITY_REORDER_TO_FRONT。这不会杀死现有活动,而是将其移动到堆栈顶部。

Intent intent = new Intent(ctx, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

这将允许上面列出的活动导航。

如果有人知道清除实际活动的方法,我仍然感兴趣。

答案 3 :(得分:0)

 @Override
  protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        finish();
        startActivity(intent);
       
  }

在清单文件中

    <activity
      android:name=".MyActivity"
      android:launchMode="singleTask" > 
   </activity>