Java 以编程方式退出Android应用程序而不完成()
在你告诉我这个问题已经被提出之前,让我告诉你,这些问题都没有适合我的答案。我的应用程序有一个主要活动。在它运行之前,我有一个启动屏幕活动。如果调用finish(),程序将返回初始屏幕。我不要这个。不要告诉我使用finish()。我听说不让Android自己关闭应用程序是一种不好的做法。我知道我在做什么…可能Java 以编程方式退出Android应用程序而不完成(),java,android,Java,Android,在你告诉我这个问题已经被提出之前,让我告诉你,这些问题都没有适合我的答案。我的应用程序有一个主要活动。在它运行之前,我有一个启动屏幕活动。如果调用finish(),程序将返回初始屏幕。我不要这个。不要告诉我使用finish()。我听说不让Android自己关闭应用程序是一种不好的做法。我知道我在做什么…可能 我希望能够从第二个活动中完全关闭应用程序。有人知道我可以这样做吗?编辑:只是想澄清一下,这不是退出应用程序的正确方式。使用风险自负。OP要求一种退出应用程序的方法,尽管这不是正确的方法 Sy
我希望能够从第二个活动中完全关闭应用程序。有人知道我可以这样做吗?编辑:只是想澄清一下,这不是退出应用程序的正确方式。使用风险自负。OP要求一种退出应用程序的方法,尽管这不是正确的方法
System.exit(0)
这就是你要找的吗?在创建第二个
活动之前,在启动屏幕中使用finish()
,然后使用finish()
是第二个活动:这不会恢复启动屏幕。即使你不想要它,我很抱歉地告诉您,干净退出的唯一方法是使用finish()
。如果您在后台关闭活动时遇到一些问题,则有另一种解决方案,请检查
基本上没有一次单击或一次全部完成的方法,并且不要使用System.exit()
,正如您所读到的,这是一种不好的做法。完成是一种方法。一旦不再需要SplashScreen活动,您实际上可以关闭它。也就是说,在不再需要SplashScreen之后,在开始您的主要活动后,只需调用finish就可以了
Intent i = new Intent(this, Home.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("isExitAction", true);
startActivity(i);
此外,并非finish()会关闭你的应用程序,即使在调用它之后,你的应用程序的进程仍然存在,你的所有静态变量仍然有效,当然,直到android决定终止你的应用程序,而这可能在你的finish调用很久之后发生。调用finish()
任何活动都会在其生命周期中销毁它。当然,销毁碎片会将其从后堆栈中移除
因此,您必须调用finish()首先从splash活动中选择code>方法,然后使用如下意图启动main活动
finish();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
Yoi还可以通过使用空方法覆盖方法OnBackPressed
,而不调用Super.OnBackPressed(),来解决此问题
对splash活动执行finish()
是一种解决方案,但有两种替代方法:
开始飞溅活动
启动辅助活动
我的偏好是第一个,因为用户不太可能想在历史堆栈中看到启动屏幕(或者根本不想看到,但这是另一个讨论)。我完全同意你的看法,finish()
在某种程度上不实用,但无论如何你可以简单地使用它,而且一切都是“洁净的”我想是最佳实践
以下是一个简短的教程,供您处理“退出”应用程序中的任何其他活动:
我假设启动屏幕是应用程序中的第一个活动
如果您的应用程序中也有主/主屏幕,则在您的启动活动有意调用主/主屏幕后立即完成启动活动,例如:
startActivity(新意图(getApplication(),Home.class));
Splash.this.finish();}代码>
执行此操作后,请执行步骤2。但不是在启动屏幕中覆盖onResume,而是在主/主屏幕中覆盖它。
2.如果用户以后需要访问启动屏幕,请不要finish()
@覆盖
受保护的void onResume(){
super.onResume();
试一试{
Intent i=getIntent();
布尔isExit=i.getBooleanExtra(“isExit操作”,false);
如果(isExit){
这个;
}
}
捕获(例外e){}
}
3.在要关闭应用程序的活动中,使用以下代码退出最适合您的位置。别忘了用Home.class
替换,具体取决于您的第一个未完成活动
Intent i = new Intent(this, Home.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("isExitAction", true);
startActivity(i);
功能:如果您在第五个活动中按下一个按钮,在第三步触发代码,它将完成之前的所有活动4、3、2,并“重定向”到活动1,即您的家(或飞溅)。
重定向后,将调用onResume()
,并完成剩余的最后一个活动。只有当isExitAction
为true时,应用程序才能到达this.finish()
这只需退出应用程序即可当您想关闭应用程序时,可以调用
或
如果你想在后台关闭它,你也应该写
android:excludeFromRecents=“true”
在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>
否,这只会退出当前活动。@nKn我知道不应该使用它。公平地说,整个问题(如作者所说)是“我不应该这样做,但仍然……”。所以我真的不认为我应该得到-1。@John Android文档清楚地指出,导致VM停止运行,程序以给定的退出状态退出。
对于exit()方法。它如何仅退出当前活动?(来源:)@dextor刚刚测试过。当我调用System.exit(0)时,它会打开启动屏幕。我不知道为什么,也许谷歌的实现很糟糕,但它不起作用。本质上,你们都在这里——属于应用程序的所有东西(除非它明确是多进程的)都退出了。但是,在安卓看来,仍然应该存在的东西将在一个新的过程中被重新创造。所以要有效