Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式退出Android应用程序而不完成()_Java_Android - Fatal编程技术网

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

Java 以编程方式退出Android应用程序而不完成(),java,android,Java,Android,在你告诉我这个问题已经被提出之前,让我告诉你,这些问题都没有适合我的答案。我的应用程序有一个主要活动。在它运行之前,我有一个启动屏幕活动。如果调用finish(),程序将返回初始屏幕。我不要这个。不要告诉我使用finish()。我听说不让Android自己关闭应用程序是一种不好的做法。我知道我在做什么…可能 我希望能够从第二个活动中完全关闭应用程序。有人知道我可以这样做吗?编辑:只是想澄清一下,这不是退出应用程序的正确方式。使用风险自负。OP要求一种退出应用程序的方法,尽管这不是正确的方法 Sy

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


我希望能够从第二个活动中完全关闭应用程序。有人知道我可以这样做吗?

编辑:只是想澄清一下,这不是退出应用程序的正确方式。使用风险自负。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()方法,然后使用如下意图启动
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)时,它会打开启动屏幕。我不知道为什么,也许谷歌的实现很糟糕,但它不起作用。本质上,你们都在这里——属于应用程序的所有东西(除非它明确是多进程的)都退出了。但是,在安卓看来,仍然应该存在的东西将在一个新的过程中被重新创造。所以要有效