我想知道如何安全完整地关闭应用程序。
如果我在触摸手机上的“返回”按钮时不想销毁活动,我可以使用moveTaskToBack()
方法在后台运行活动。现在,该应用程序的主要活动是可见的。然后,如果我决定通过触摸BACK按钮关闭此应用程序,将调用主要活动的onDestroy()
方法,但不会调用移动到后台的onDestroy()
方法的活动,这意味着活动是没有停止那么我该如何关闭该应用的所有活动,无论它是在前景还是背景中。
PS:实际上,我之所以遇到这个问题:我有一个应用程序,它包含Activity A(主界面)和Activity B(控制面板)。在活动B中,只要应用程序正在运行,某些控制状态必须保持活动状态,无论B处于前台还是后台,都可以说当我从B切换到A,然后返回B,B的内容与之前保持一致离开它,除非我重新启动应用程序。开始时,每按一次BACK按钮就会破坏B.然后我按照别人的建议重写onKeyDown()
方法来保护B不被BACK摧毁,保留B的状态是有用的,因为B从未被破坏过。因此,当我尝试关闭应用程序时,我不知道完成或关闭B.也许我可以向B添加退出按钮,或者在我杀死A时向背景B发送消息以自杀,但我认为这两种方式太傻了。
我尝试使用onSavedInstanceState()
来保持B的状态,但在按下BACK时不会调用该方法。我还尝试了SharedPreference
,但是下次启动应用时无法初始化状态。
答案 0 :(得分:1)
当用户按下“返回”按钮时,将弹出当前活动 从堆栈的顶部(活动被破坏)和之前的 活动恢复(其UI的先前状态已恢复)。 堆栈中的活动永远不会重新排列,只能推送和弹出 从当前启动的堆栈推入堆栈 活动并在用户使用“后退”按钮离开时弹出。 因此,后堆栈作为" last in,first out"宾语 结构体。图1显示了此行为,并显示了时间轴 活动与当前后台堆栈之间的进展 每个时间点。
此外,如果您需要完全关闭应用程序(所有前台+后台活动),您可以在应用程序的任何位置终止该过程。使用,
android.os.Process.killProcess(android.os.Process.myPid());
您将在下面获得一些详细信息,
How to kill an application with all its activities? How can I close my application on back pressed in android
答案 1 :(得分:0)
无法保证每次活动时都会调用ondestroy()。所以我认为最好在onStop()方法中完成你的活动,因为每次都会调用它。有关更多信息,请参阅this
答案 2 :(得分:-1)
为了完全完成活动,即不在后台运行,你只需要调用Activity方法finish()
。此方法完成活动。
如果要完成后退按钮的活动。使用下面的代码
public void onBackPressed(){
this.finish();
}