Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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
Android-以编程方式退出或终止应用程序的完美解决方案?_Android_Kill_Terminate_Quit - Fatal编程技术网

Android-以编程方式退出或终止应用程序的完美解决方案?

Android-以编程方式退出或终止应用程序的完美解决方案?,android,kill,terminate,quit,Android,Kill,Terminate,Quit,如果我的应用程序遇到特定错误,我希望结束我的应用程序而不在系统中留下任何痕迹。我已经看过很多关于这个话题的文章,特别是这两篇 答案很好,但建议的解决方案太单调和/或不必要的复杂 根据尼尔·特拉夫特(Neil Traft)在上述第一篇文章中的回答,我找到了一个完美的解决方案 如果应用程序的后台只有一个活动,System.exit(0)或android.os.Process.killProcess(android.os.Process.myPid())似乎都能工作,否则android只是重新启动

如果我的应用程序遇到特定错误,我希望结束我的应用程序而不在系统中留下任何痕迹。我已经看过很多关于这个话题的文章,特别是这两篇


答案很好,但建议的解决方案太单调和/或不必要的复杂

根据尼尔·特拉夫特(Neil Traft)在上述第一篇文章中的回答,我找到了一个完美的解决方案

如果应用程序的后台只有一个活动,System.exit(0)或android.os.Process.killProcess(android.os.Process.myPid())似乎都能工作,否则android只是重新启动应用程序,将(前1个)活动推到前台,可能是因为安卓假定用户正在与应用程序交互,而应用程序突然“崩溃”,所以他应该继续和它互动

因此,我的解决方案是首先使用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的设计原则。。。虽然当你真的,真的需要它的时候,这是完美的


希望这对别人有帮助

对你来说,对上述问题中的一个添加评论可能比提出你自己的问题并立即回答要好。我花了相当长的时间才找到这个解决方案,即使是在经历了所有其他问题,然后进行了我自己的尝试之后。回答或评论其他问题仍然会将我的方法保留在页面下面的某个地方,大多数用户看不到,因此无法应用它。因此,我创建了一个新问题,以便其他人能够快速找到解决方案。所以,我认为它不值得投反对票,但你有自己的意见是完全可以的。顺便说一句,我试着对其他问题发表评论,但作为一个新用户,系统不允许我发表评论。最好在你的问题上贴一个答案,在贴出我的问题并回答之前,我会先看答案。@dvs:那么你应该在原来的问题上贴出你的答案。当上面已经有两个旧问题时,没有必要创建一个副本。“接受提示”不同于剽窃,然后通过垃圾邮件发布问题链接来获得声誉分数。这可能会适得其反。你在哪里看到同样的解决方案,说这是剽窃?让我知道,我将删除我的问题(希望有办法做到这一点),这是与尼尔·特拉夫特的答案相同的答案,你指的是。你拿走了两个重要的部分,但遗漏了解释,这使得他的答案很好。是的,@dws,你可以删除你的问题。你已经删除了两个垃圾帖子(或者可能是我们友好的版主帮你删除的)。一旦你删除了这个问题,你将获得你的声誉积分,这将使你更接近于发表评论。@323go:我将它标记为重复。我没有投票关闭的特权。