如何关闭已经moveTaskToBack的活动

时间:2016-01-04 09:18:36

标签: android

我想知道如何安全完整地关闭应用程序。

如果我在触摸手机上的“返回”按钮时不想销毁活动,我可以使用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,但是下次启动应用时无法初始化状态。

3 个答案:

答案 0 :(得分:1)

来自back stack doc

  

当用户按下“返回”按钮时,将弹出当前活动   从堆栈的顶部(活动被破坏)和之前的   活动恢复(其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

Kill Activity on back button

答案 1 :(得分:0)

无法保证每次活动时都会调用ondestroy()。所以我认为最好在onStop()方法中完成你的活动,因为每次都会调用它。有关更多信息,请参阅this

答案 2 :(得分:-1)

为了完全完成活动,即不在后台运行,你只需要调用Activity方法finish()。此方法完成活动。 如果要完成后退按钮的活动。使用下面的代码

public void onBackPressed(){
    this.finish();
}