[英]how to finish all activities and close the application in android?
我的应用程序有以下流程:
Home->screen 1->screen 2->screen 3->screen 4->screen 5>Home->screen 2->Home->Screen 3
我的问题是,当我尝试关闭应用程序时,每次尝试关闭应用程序时都会打开 Home 活动。
当用户在主屏幕上按下设备的返回键时,我只想关闭应用程序。
有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
这适用于所有版本的我。 关闭所有以前的活动,如下所示:
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
}
要在打开新活动时清除所有活动,请执行以下操作:
Intent intent = new Intent(getApplicationContext(), YourActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
有时finish()
不起作用
我已经解决了这个问题
finishAffinity()
不要使用
System.exit(0);
它将在没有动画的情况下完成应用程序。
您可以尝试使用 Intent.FLAG_ACTIVITY_CLEAR_TASK http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK启动 Screen 3
嗨,如果您在片段中并且无法按原样使用完成方法(因为完成应该可以解决您的问题),那么您可以在startActivity(intent);
之后使用getActivity.finish()
方法startActivity(intent);
. 如果您不在片段中,则可以在startActivity(intent);
后直接使用finish()
startActivity(intent);
线
在您的活动清单文件中添加android:noHistory="true"
。
有2种方法可以解决您的问题
1) 在每个活动的 startActivity(intent) 之后调用 finish()
2)在menifest文件的每个标签中设置android:launchMode="singleInstance"
我认为第二种方式最适合解决问题,但您也可以使用第一种方式
public void onBackPressed() {
super.onBackPressed();
finishAffinity();
System.exit(0);
}
可能是这种方法更好地用于关闭所有活动和清理设备内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.