【问题标题】:Android - Perfect solution for quitting or terminating an application programmatically?Android - 以编程方式退出或终止应用程序的完美解决方案?
【发布时间】:2015-03-05 20:33:51
【问题描述】:

如果我的应用遇到特定错误,我想在系统中不留任何痕迹的情况下结束我的应用。我已经看到了很多关于这个主题的主题,特别是这两个。

Is quitting an application frowned upon?

How to quit android application programmatically

答案很好,但建议的解决方案过于乏味和/或过于复杂。

【问题讨论】:

  • 对上述问题之一添加评论可能比提出自己的问题并立即回答要好。
  • 我花了相当多的时间才找到这个解决方案,即使在完成了所有其他问题之后,然后自己进行了尝试和试验。回答或评论其他问题仍会将我的方法保留在页面上的某个位置,大多数用户不会看到它,因此将无法应用它。因此,我创建了一个新问题,以便其他人可以快速找到解决方案。所以,我认为它不值得一票,但有自己的意见是完全可以的。
  • 顺便说一句,我尝试对其他问题发表评论,但作为新用户,系统不允许我发表评论。最好在发布我的问题并回答之前按照blog.stackoverflow.com/2011/07/… 的答案发布您的问题。
  • @dvs:那么您应该在原始问题上发布您的答案。如果上面已经存在两个旧问题,则无需创建副本。

标签: android kill terminate quit


【解决方案1】:

从上面第一篇文章中 Neil Traft 的回答中得到启发,我找到了适合这种情况的完美解决方案。

System.exit(0) 或 android.os.Process.killProcess(android.os.Process.myPid()) 如果您在应用程序的后台堆栈中只有一个 Activity 似乎都可以工作,否则 Android 只会重新启动您的应用程序推送将 (top - 1) Activity 放到前台,可能是因为 Android 假设用户正在与应用程序交互并且它突然“崩溃”,所以他应该继续与它交互。

所以,我的解决方案是首先使用 Activity.moveTaskToBack() 将应用程序发送到后台,然后调用上述两种方法中的任何一种。

private void terminateApp() {       

    // TODO: Don't forget to clean up your background threads, services, etc. 

    // send the app into background, otherwise Android will relaunch the app process if you have multiple Activities in your backstack.
    moveTaskToBack(true);

    // kill everything running in this process.
    System.exit(-1); // or you can use android.os.Process.killProcess(android.os.Process.myPid());
}

我认为这种方法没有任何问题,只是它违反了 Android 设计原则……尽管当你真的非常需要它时,它可以完美地工作。

希望这对某人有所帮助!

【讨论】:

  • “提示”不同于剽窃然后向您的问题发布垃圾邮件链接以获得声誉积分。这可能会适得其反。
  • 你在哪里看到说这是抄袭的相同解决方案?让我知道,我会删除我的问题(希望有办法做到这一点)
  • 这与您所指的 Neil Traft 的答案相同。你抓住了两个重要的部分,但忽略了解释,这使得他的回答很好。
  • 是的,@dws,你可以删除你的问题就好了。您已经删除了这两个垃圾帖子(或者可能是我们友好的版主为您删除了它们)。删除问题后,您将恢复您的声望点,这将使您更接近能够发表评论。
  • @323go:我将其标记为重复。我没有投票结束的特权。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多