我的申请有以下流程:
主页 - >屏幕1->屏幕2->屏幕3->屏幕4->屏幕5>主页 - >屏幕2->主页 - >屏幕3
我的问题是,当我尝试关闭应用程序时,每当我尝试关闭应用程序时,Home活动就会打开。
我只想在用户在主屏幕上按下设备的后退键时关闭应用程序。
答案 0 :(得分:70)
有finishAffinity()方法可以完成当前活动和所有父活动,但它仅适用于Android 4.1或更高版本。
答案 1 :(得分:15)
这适合我。
您应该使用FLAG_ACTIVITY_CLEAR_TASK
和FLAG_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
}
答案 2 :(得分:2)
这适用于所有版本的我。 关闭所有以前的活动,如下所示:
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
}
答案 3 :(得分:2)
要在打开新活动时清除所有活动,请执行以下操作:
Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
答案 4 :(得分:2)
使用finishAffinity()
方法完成当前活动和所有父活动。但它仅适用于API 16+
,意味着Android 4.1或更高版本。
API 16+使用:
finishAffinity();
API 16以下使用:
ActivityCompat.finishAffinity(this); //with v4 support library
退出整个应用:
finishAffinity(); // Close all activites
System.exit(0); // Releasing resources
答案 5 :(得分:1)
您可以尝试使用Intent.FLAG_ACTIVITY_CLEAR_TASK http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK启动屏幕3
答案 6 :(得分:1)
有时finish()
无法正常工作
我用
解决了这个问题 finishAffinity()
不要使用
System.exit(0);
它将完成app而不需要动画。
答案 7 :(得分:1)
您好,如果您处于片段状态并且不能按原样使用finish方法(因为finish应该可以解决您的问题),则可以在getActivity.finish()
之后使用startActivity(intent);
方法。
如果您不在片段中,则可以在finish()
行之后直接使用startActivity(intent);
答案 8 :(得分:0)
在活动清单文件中添加android:noHistory="true"
。
答案 9 :(得分:0)
有两种方法可以解决您的问题
1)在每个活动中的startActivity(intent)之后调用finish()
2)在清单文件的每个标记中设置android:launchMode =“singleInstance”
我认为第二种方式最适合解决问题但你也可以使用第一种方式
答案 10 :(得分:0)
public void onBackPressed() {
super.onBackPressed();
finishAffinity();
System.exit(0);
}
可能是这种方法可以更好地用于关闭所有活动和清理设备内存。