以编程方式退出Android应用程序而不完成()

时间:2014-03-01 20:38:55

标签: java android

在你告诉我这个问题已被提出之前,请允许我告诉你,这些问题都没有一个适合我的答案。我的应用程序有一个主要活动。在它运行之前,我有一个启动画面活动。如果我调用finish(),程序将返回到我的启动画面。我不想要这个。不要告诉我使用finish()。我听说不让Android自己关闭应用程序是不好的做法。我知道我在做什么......可能......

我希望能够从第二个活动中完全关闭该应用程序。有谁知道我可以做到这一点的方式?

9 个答案:

答案 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()是一种解决方案,但有两种替代方法:

  1. 启动启动活动with android:noHistory="true" in its manifest entry
  2. 启动辅助活动with the Intent flag FLAG_ACTIVITY_CLEAR_TOP
  3. 我的偏好是第一个,因为用户不太可能希望在历史堆栈中看到启动画面(或者根本就没有,但这是一个不同的讨论)。

答案 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()在某种程度上是不切实际的,但无论如何你可以简单地使用它,并且所有人都会用我认为的最佳实践“犹太洁食”。

以下是一个简短的教程,供您处理应用中任何其他活动的“退出”:

我认为启动画面是您应用中的第一个活动。

  1. 如果您的应用中还有一个主/主屏幕,那么在使用您的Splash活动中的Intent调用main / home之后立即完成启动活动。
  2. 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