2013-11-26 51 views
14

我的应用程序具有以下流动如何完成所有活动并在android中关闭应用程序?

首页 - >屏幕1->屏幕2->屏幕3->屏幕4->屏幕5>首页 - >屏幕2->首页 - >屏幕3

我的问题是,当我试图关闭应用程序时,Home活动会在我尝试关闭应用程序时每次打开。

我只想在用户在主屏幕上按下设备的后退键时关闭应用程序。

+0

看到这个:http://stackoverflow.com/questions/4758462/android-finish-all-activities – Avijit

回答

52

存在将完成当前的活动和所有父活动finishAffinity()方法,但它只能在搭载Android 4.1或更高版本

+2

这是一个救命......! – GAMA

0

android:noHistory="true"添加到您的活动清单文件中。

+0

我敢打赌,当他按下时他想回到前一个屏幕,但只有当他在主屏幕上时才关闭它们。 –

0

有2种方式为您解决问题

1)调用完成()后startActivity(意向),在每一个活动

2)设置机器人:在menifest文件中的每个标签launchMode =“singleInstance”

我想第二个办法是最好的解决问题,但你也可以使用第一种方式

2

这很适合我在所有版本启动画面3。 关闭所有以前的活动如下:

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

然后在HomeActivity onCreate()方法添加此完成在MainActivity

setContentView(R.layout.main_layout); 

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

这很适合我。

  • 你应该使用FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK标志。

    Intent intent = new Intent(SecondActivity.this, CloseActivity.class); 
    //Clear all activities and start new task 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
    
  • onCreate()CloseActivity活性的方法。

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        finish(); // Exit 
    } 
    
+0

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);为我工作。 –

0
public void onBackPressed() { 
    super.onBackPressed(); 
    finishAffinity(); 
    System.exit(0); 
} 

可以是这种方法是更好地利用以关闭所有的活性和清洁设备存储器中。

0

要清除所有的活动,同时开辟新的一个然后执行以下操作:

Intent intent = new Intent(getApplicationContext(), YourActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
0

有时finish()不工作

我已经解决了这个问题与

finishAffinity()

不要使用

System.exit(0); 

它将完成应用程序而无需注册。

相关问题