【发布时间】:2013-12-11 05:15:32
【问题描述】:
我的申请流程如下:
首页->屏幕 1->屏幕 2->屏幕 3->屏幕 4->屏幕 5>首页->屏幕 2->首页->屏幕 3
我的问题是,当我尝试关闭应用程序时,每次尝试关闭应用程序时 Home 活动都会打开。
我只想在用户在主屏幕上按下设备的返回键时关闭应用程序。
【问题讨论】:
标签: android android-activity activity-stack
我的申请流程如下:
首页->屏幕 1->屏幕 2->屏幕 3->屏幕 4->屏幕 5>首页->屏幕 2->首页->屏幕 3
我的问题是,当我尝试关闭应用程序时,每次尝试关闭应用程序时 Home 活动都会打开。
我只想在用户在主屏幕上按下设备的返回键时关闭应用程序。
【问题讨论】:
标签: android android-activity activity-stack
finishAffinity() 方法可以完成当前活动和所有父活动,但它仅适用于 Android 4.1 或更高版本。
【讨论】:
这对我很有效。
您应该使用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);
CloseActivity 活动的onCreate() 方法。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish(); // Exit
}
【讨论】:
使用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
【讨论】:
有时finish() 不工作
我已经用
解决了这个问题finishAffinity()
不要使用
System.exit(0);
它将在没有动画的情况下完成应用程序。
【讨论】:
要在打开新活动时清除所有活动,请执行以下操作:
Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
【讨论】:
在您的活动清单文件中添加android:noHistory="true"。
【讨论】:
您可以尝试使用 Intent.FLAG_ACTIVITY_CLEAR_TASK http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK 启动屏幕 3
【讨论】:
您好,如果您在片段中并且无法按原样使用finish 方法(因为finish 应该可以解决您的问题),那么您可以在startActivity(intent); 之后使用getActivity.finish() 方法。
如果您不在片段中,则可以在startActivity(intent); 行之后直接使用finish()
【讨论】:
有两种方法可以解决您的问题
1) 在每个活动的 startActivity(intent) 之后调用 finish()
2) 在清单文件的每个标签中设置 android:launchMode="singleInstance"
我认为第二种方法最适合解决问题,但您也可以使用第一种方法
【讨论】: