Intent.FLAG_ACTIVITY_CLEAR_TOP不会删除活动堆栈

我正在开发应用程序,我想在按钮点击关闭整个应用程序。 我知道在android中我们不应该考虑关闭应用程序,因为android会自动执行此操作退出应用程序不赞成? 。 但我想关闭我的申请。

所以我正在做什么来关闭应用程序是我使用Intent.FLAG_ACTIVITY_CLEAR_TOP标志来删除活动堆栈。

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); 

FinishActivity.class onCreate中,我调用this.finish()但是应用程序没有被关闭,之前的活动被重新打开。

FinishActivity.class

 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.finish(); } 

更新:

这是场景

 MainActivity->Activity2->Activity3->FinishActivity 

这里Activity2在完成活动后被打开。

我如何实现这一目标? 任何想法和建议将不胜感激。

感谢和问候

用这个 –

  Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); finish(); 

编辑 – 新的答案,并将完成工作..

举个例子……相应地做你的项目需要 –

我正在进行三个活动类A,B和C ..我已经在C类活动的视图上应用了关闭按钮。如果你想通过后退按钮,你可以转到上一个活动,当你按下关闭按钮然后你会退出应用程序..看看 –

 public class AActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent i = new Intent(this, B.class); startActivityForResult(i, 1); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == 5) { finish(); } } 

}

参加下一堂课 –

  public class B extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.b); Intent i = new Intent(this, C.class); startActivityForResult(i, 2); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == 5) { setResult(5); finish(); } } 

}

采取最后的活动 –

  public class C extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.c); } // close button..set by xml view..you can set it by button listener. public void close(View v) { setResult(5); finish(); } 

}

希望它能解决你的问题。

试一试。 这应该清除你的活动堆栈。

 Intent i = new Intent(this,MyActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); 

这最终100%的时间对我有用。 我独立尝试了所有的标志,从未为代码的所有实例工作过。 使用了我想要这个function的所有标志,大约5个不同的地方,现在它可以工作。

  Intent intent = new Intent(actvSignIn.this, actvNearbyPlaces.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); 

来自Intent.FLAG_ACTIVITY_CLEAR_TOP文档

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给(现在开启) top)旧活动作为新的意图。

因此,要使其工作,您的FinishActivity必须是您的Activity堆栈中的第一个。 在任何其他情况下,此解决方案不会给你任何东西。

您必须执行几个步骤才能执行此操作:

1)将FinishActivity作为启动器活动。

2)不要为它提供任何视图,并直接从onCreate回调启动应用程序的第一个Activity

3)重新定义onRestart回调:

代码示例:

 private boolean isNeedToContinue = true; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); } @Override protected void onResume() { super.onResume(); if (isNeedToContinue) { startActivity(new Intent(this,FirstVisibleActivity.class)); isNeedToContinue = false; } else { finish(); } } @Override protected void onRestart() { super.onRestart(); finish(); isNeedToContinue = false; } 

我想这就是你所需要的。 祝你好运!

setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

除了在xml的FinishActivity定义中将launchMode设置为“singleTop”,覆盖onNewIntent方法,你可以传递一些额外的信息作为意图的一部分,在onCreate中完成你的活动,在onNewIntent活动方法中根据来自调用的一些信号完成它活动或根据您的需要简单完成。 也许你的其他活动可能有不同的lauchmodes,这就是为什么他们没有完成。

这对我有用:

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); 

试试这种方式这对我有用:

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); 

而不是你的代码

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); 

尝试这个:

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); 

由于其他答案有以下应该工作。

 Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

对于API级别<11, Intent.FLAG_ACTIVITY_CLEAR_TASK不可用。 相反,我使用了支持库中的IntentCompat.FLAG_ACTIVITY_CLEAR_TASK

请参阅IntentCompat

可能会帮助某人绊倒。