Android:清除所有backstack活动,然后完成当前活动

时间:2015-04-10 18:27:40

标签: android android-activity back-stack

我的应用程序中有各种活动,流程非常复杂。 我想要做的是,只要连接usb设备,我想清除并完成后台堆栈活动,然后完成当前活动,并完成System.exit(0)以关闭应用程序。

我已经实现了usb设备监听器。我想知道如何清除并完成堆栈活动(如果有的话,每次都没有任何后台活动),然后完成当前的活动。

此外,如果我的活动A在Top上,并且它在后栈中有2个活动(B,C)。现在,如果活动A在后台运行并且USB连接,那么只有活动A会听到它吗? (我在每项活动中都实现了usb接收器。)

如果没有我的应用程序崩溃,如何实现这一目标?

由于

2 个答案:

答案 0 :(得分:6)

finishAffinity()方法可以完成当前活动和所有父活动,但它仅适用于 Android 4.1或更高版本

Source

  

finishAffinity()将完成此活动以及当前任务中具有相同亲和力的紧随其下的所有活动

如果您想要所有API级别
在你的一项活动中

Intent intent = new Intent(this, YourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // this will clear all the stack
intent.putExtra("Exit me", true);
startActivity(intent);
finish();

然后在YourActivity onCreate()方法中添加此内容以完成活动

setContentView(R.layout.your_layout);
if( getIntent().getBooleanExtra("Exit me", false)){
   finish();
   return; // add this to prevent from doing unnecessary stuffs
}

答案 1 :(得分:0)

在我制作的应用中,我已经提出:

if(Globals.isExit){
  finish();
}

在每个活动中的每个onResume()方法中。

Globals是一个在manifest.xml中声明为的类。 Global类有一个名为exit的布尔值。

在所有活动选项菜单中,包含一个将Globals.exit设置为true的退出选项,并调用finish()

然后任何尚未完成的活动都已完成。

不确定是否需要使用意图来清除后台堆叠,或者是否需要为您清除它。对不起,如果我错了。

对于打字错误,我很抱歉,我正打电话。