ste*_*eve 56 android activity-finish android-activity
我有一个具有多个页面的应用程序,即多个活动,其中一些仍处于打开状态.
有没有办法一次关闭所有活动?
小智 121
每当您希望退出所有打开的活动时,您应该按下一个按钮,该按钮加载应用程序启动时运行的第一个活动,然后清除所有其他活动,然后完成最后剩余的活动.这样做在您的项目中应用以下代码
Intent intent = new Intent(getApplicationContext(), FirstActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
上面的代码完成除FirstActivity之外的所有活动.然后我们需要完成FirstActivity的输入在Firstactivity的oncreate中输入以下代码
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
Run Code Online (Sandbox Code Playgroud)
你完成了......
Kin*_*ses 60
有一种finishAffinity()方法Activity可以完成当前活动和所有父活动,但它仅适用于Android 4.1或更高版本.
对于API 16+,请使用
finishAffinity();
Run Code Online (Sandbox Code Playgroud)
对于较低(Android 4.1较低),请使用
ActivityCompat.finishAffinity(YourActivity.this);
Run Code Online (Sandbox Code Playgroud)
Mon*_*idi 23
我发现的最佳解决方案,与API级别<11的设备兼容
Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
Run Code Online (Sandbox Code Playgroud)
此解决方案需要Android支持库
小智 20
对于API 16+,请使用
finishAffinity();
Run Code Online (Sandbox Code Playgroud)
为了更低,使用
ActivityCompat.finishAffinity(YourActivity.this)
Run Code Online (Sandbox Code Playgroud)
Dip*_*iya 11
清晰的活动历史有三种解决方案.
1)您可以finish()通过意图在开始新活动时写作.
2)在Androidmanifest.xml文件android:noHistory="true"中的所有<activity>标签中写入,如果你打开了新的活动而没有写完finish(),那么之前的活动总是完成,写完你的活动就像这样.
<activity
android:name=".Splash_Screen_Activity"
android:label="@string/app_name"
android:noHistory="true">
</activity>
Run Code Online (Sandbox Code Playgroud)
3)写入system.exit(0)退出应用程序.
我正在努力解决同样的问题.打开about页面并finish();从那里打电话没有关闭应用程序而是去了之前的活动,我想从about页面本身关闭应用程序.
这是对我有用的代码:
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
finish();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
None of the other answers worked for me. But I researched some more and finally got the answer.
You actually asked to close the app as I needed. So, add following code:
finishAffinity();Run Code Online (Sandbox Code Playgroud)
您可以使用finishAffinity()方法来完成当前活动和所有父活动。但这仅适用于API 16+。
API 16+使用:
finishAffinity();
Run Code Online (Sandbox Code Playgroud)
在API 16以下使用:
ActivityCompat.finishAffinity(this); //with v4 support library
Run Code Online (Sandbox Code Playgroud)
要退出整个应用程序:
finishAffinity(); // Close all activites
System.exit(0); // closing files, releasing resources
Run Code Online (Sandbox Code Playgroud)
以下两个标志为我工作。他们将清除之前的所有活动并开始新的活动
Intent intent = new Intent(getApplicationContext(), MyDetails.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。