在你告诉我这个问题已被提出之前,请允许我告诉你,这些问题都没有一个适合我的答案。我的应用程序有一个主要活动。在它运行之前,我有一个启动画面活动。如果我调用finish(),程序将返回到我的启动画面。我不想要这个。不要告诉我使用finish()。我听说不让Android自己关闭应用程序是不好的做法。我知道我在做什么......可能......
我希望能够从第二个活动中完全关闭该应用程序。有谁知道我可以做到这一点的方式?
答案 0 :(得分:6)
如果要关闭应用程序,可以致电
finishAffinity();
或 如果你想在背景中关闭它,你也应该写,
机器人:excludeFromRecents = “真”
AndroidManifest中的:
<activity
android:name="com.smart.remote.main.SplashActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 1 :(得分:5)
对启动活动执行finish()
是一种解决方案,但有两种替代方法:
android:noHistory="true"
in its manifest entry。FLAG_ACTIVITY_CLEAR_TOP
。我的偏好是第一个,因为用户不太可能希望在历史堆栈中看到启动画面(或者根本就没有,但这是一个不同的讨论)。
答案 2 :(得分:4)
在创建第二个finish()
之前在启动画面中使用activity
,然后使用finish()
是第二个activity
:不要带回启动画面。
答案 3 :(得分:3)
finishAffinity();
这只是退出应用
答案 4 :(得分:2)
在任何活动中调用finish()
将经历其生命周期以销毁它。确保销毁片段会将其从后栈中删除。
所以,您必须先从您的启动活动中调用finish();
方法,然后使用意图启动MainActivity
,如下所示
finish();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
Yoi还可以通过使用空方法覆盖方法OnBackPressed
而不调用Super.onBackPressed ();
答案 5 :(得分:1)
即使你不想要它,我很遗憾地告诉你,干净利落的唯一方法是使用finish()
。如果您在后台关闭Activities
时遇到一些问题,还有其他解决方案,请检查this link。
基本上没有一键式或一次性完成此任务的方式,并且不使用System.exit()
,这是一种不好的做法,你可以阅读here。
答案 6 :(得分:1)
结束是要走的路。实际上,一旦不再需要SplashScreen活动,您就可以关闭它。 IE浏览器。在不再需要SplashScreen之后,只需在开始主要活动后调用完成。
此外,它不是完成()将关闭你的应用程序,即使在调用它的应用程序的过程仍然存在,所有的静态变量仍然有效,当然直到android决定杀死你的应用程序,这可能发生很长时间打完电话后。
答案 7 :(得分:0)
编辑:要清楚,这是不从应用程序退出的正确方法。使用风险由您自己承担。 OP正在要求退出应用程序的 A 方式,即使它不是正确方式。
System.exit(0)
这是你要找的吗?
答案 8 :(得分:0)
我完全同意你的观点,finish()
在某种程度上是不切实际的,但无论如何你可以简单地使用它,并且所有人都会用我认为的最佳实践“犹太洁食”。
以下是一个简短的教程,供您处理应用中任何其他活动的“退出”:
我认为启动画面是您应用中的第一个活动。
startActivity(new Intent(getApplication(), Home.class));
Splash.this.finish();}
执行此操作后,请按照步骤2.但不要覆盖启动画面中的onResume,而不是在主页/主屏幕中覆盖它。
2.如果您的用户以后需要访问初始屏幕,请不要finish()
启动画面,而是覆盖其onResume方法,如下所示:
@Override
protected void onResume() {
super.onResume();
try {
Intent i = getIntent();
Boolean isExit = i.getBooleanExtra("isExitAction",false);
if(isExit){
this.finish();
}
}
catch (Exception e){}
}
3.在要关闭应用程序的活动中,使用以下代码退出最适合您的位置。不要忘记取代Home.class
,取决于你的第一个未完成的活动。
Intent i = new Intent(this, Home.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("isExitAction", true);
startActivity(i);
它做了什么:如果您按下第5个活动中的按钮,该按钮在第3步中触发代码,它将完成之前的所有活动4,3,2,并将您“重定向”到活动1,这是您的主页(或Splash )。
重定向后,调用onResume()
,它完成最后剩余的活动。仅当this.finish()
为真时,应用程序才会到达isExitAction