【发布时间】:2012-03-20 21:41:13
【问题描述】:
我正在寻找一种通过代码退出我的 android 应用程序的方法。 是的,我知道,我不应该这样做,因为当您按下后退按钮时,android 会处理它,但我有一个自定义流程迫使我实现这一点。我已经搜索了一段时间,找到了多个答案:
- 不应该这样做 => 没有选择。
- 在我的活动中调用 finish() => 仅针对 1 个活动,而不是整个应用。
- 使用特殊标志启动第一个活动的 Intent => 我有多个入口点,所以不是一个真正的选择。
- 杀死我自己的进程 => 不确定这个,它会在所有活动中调用 onDestroy() 方法吗?我的后台服务会继续运行吗? (不应停止)
所以我想知道,是否有任何其他选项可以退出我的应用程序,或者我真的仅限于这些选项? 如果真的没有其他选择,那么我正在考虑在我的 Application 类中创建我的活动的所有实例的列表,然后循环它们以在它们上调用 finish() 。但我不知道这是否是处理这个问题的正确方法。
这就是为什么我在这里问我的问题,关闭我的应用程序的最佳方法是什么?
编辑:我或多或少地解决了这个问题。我有一个我的活动的弱引用列表。在每个 onCreate 中,我将活动添加到列表中。然后,当我想退出我的应用程序时,我只需循环列表并调用 finish()。问题是:如果列表太大,它不会完成我所有的活动,因为 android 已经摧毁了它们。所以每次我确定我不再需要它们时,我都会完成它们。就我而言,列表不能超过 3/4 的活动,因此无需再担心活动未完成。同样使用这种方法,我不必破坏自己的进程。
【问题讨论】:
-
System类可能会有所帮助(或 Android 等价物)? (我对android编程不熟悉) -
请阅读this
-
“我有一个定制的流程,迫使我实现这个”——这是你的应用程序中的一个错误。请修复您应用中的错误。
-
嗯,这不是一个真正的错误。在浏览应用程序时,有一段时间当用户按下后退按钮时,他会期望应用程序关闭(但不是每次都关闭)。但是当我调用finish() 时,会显示“旧”活动。这些也必须关闭。所以也许你会说,当我开始一个新的活动时,我应该完成这些活动。但是当我开始一个新的活动时,我还不知道用户是否能够返回到当前活动。我知道,这听起来很复杂 :) 但关闭应用程序真的很有意义。
-
好吧,我可以通过更改我的流程设置来“修复设计错误”。但这需要我扩充主要活动中的每个活动,并自己处理历史。我只是认为这不是正确的方法。想想一个选项卡式应用程序:当您打开一个选项卡时,它会启动一个新活动,但当您按下返回时,它会关闭。选项卡式活动也可以打开另一个活动,当您按回时,它不会关闭。除此之外,在非选项卡活动中,将有一种“显示选项卡”的方法。这将导致用户认为他回到了起点,而实际上并没有。