当任何形式的退出完成时,即使用HOME,SWITCH和BACK按钮完成关闭Android应用程序

问题描述:

我正在构建Android应用程序,特别是登录页面,我希望应用程序完全关闭应用程序用户将以任何方式退出登录页面,即使用SWITCH,HOME或BACK按钮。当任何形式的退出完成时,即使用HOME,SWITCH和BACK按钮完成关闭Android应用程序

应用程序不应该完全关闭的唯一时间应该是用户成功登录时,即按下自定义创建的登录按钮或输入按钮时。

我已经能够成功地关闭应用程序,但即使在用户成功登录时也会关闭。这并不意味着要做到这一点。

下面是我的完整停机码 - 我接手的onDestroy(),onBackPressed(),完成()和的onStop()方法:

// Deal with back button 
public void onBackPressed() { 
    System.runFinalizersOnExit(true); 

    System.exit(0);  
} 

// Deal with exiting of app 
public void finish() { 

    System.runFinalizersOnExit(true); 

    System.exit(0); 

} 

// Deal with exiting of app 
public void onDestroy() { 
    System.runFinalizersOnExit(true); 

    System.exit(0); 
} 

// Deal with exiting of app 
public void onStop() { 
    System.runFinalizersOnExit(true); 

    System.exit(0); 
} 

没有任何人有任何想法,关于我的问题

你的帮助是极大的赞赏

+0

你不必'@ Override'任何这些或'super.onStop()'或任何其他'super.method()'。这可能会导致问题吗? – TronicZomB 2013-03-13 15:32:54

+1

@TronicZomB“@ Override”注解只是一种方便,它可以帮助如果重写方法被重命名或删除,因为它会导致编译器警告/错误。这并不是强制性的 – nicopico 2013-03-13 15:39:33

+0

@nicopico谢谢。我仍然在学习,所以很高兴知道。 – TronicZomB 2013-03-13 15:40:51

只需创建一个类成员布尔值mLoggedIn并将其设置为true当自定义创建的登录按钮或输入按钮被按下时。
然后

@Override 
protected void onPause() 
{ 
    super.onPause(); 
    if (!mLoggedIn) 
    { 
     finish(); 
    } 
} 

hereonStop()方法的说明。我想你会在用户成功登录后再打开另一个Activity,上面的Activity变得不可见,并且在你退出你的应用程序时呼叫onStop()。所以,请不要覆盖onStop()

+0

嗨,谢谢。事实上,当用户登录时,我会调用另一个活动,即主页。我已经停止覆盖onStop(),但是我的问题仍然存在,即假设用户使用主页按钮或切换按钮退出应用程序,则应用程序不会完全关闭下来,我需要它来做到这一点。 – TokTok123 2013-03-13 15:56:02

每当您的活动变为不可见时,系统会调用onStop()方法:当您的应用进入后台,屏幕关闭时,或当您切换到其他活动时。

无论如何,你想要做的是强烈不鼓励。 (Dianne Hackborn是Android Framework的主要开发人员之一)。

强制关闭您的应用使用System.exit(),Process.killProcess()等与Android应用生命周期存在冲突的强烈风险,并且可能破坏其保存的状态,导致您的用户出现意想不到的不愉快行为。

更好的方法是在启动登录活动时使用标志FLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_CLEAR_TOP。 这应该从应用程序中删除先前的活动,这与从用户角度开始新应用程序相同。

+0

@nicopio:嗨,谢谢。我已经阅读论坛,我明白呼吁onStop()不鼓励,如果我可以完全关闭应用程序的任何想法,如果用户要退出使用家庭和切换按钮或退出应用程序通过选择一个电话说?谢谢 – TokTok123 2013-03-13 16:10:00

+1

@amonari我对我的帖子进行了编辑,可以帮助您以合适的方式获得您想要的内容。你可以**重写**'onStop()',这是对'System.exit()'的调用,这是不鼓励的。 – nicopico 2013-03-13 16:20:39