Android - 当App被杀时会调用什么方法?

时间:2014-03-25 23:26:41

标签: android android-lifecycle

我正在编写一个玩家轮流投入的游戏。在回合结束时,我将数据发送到服务器并更新我的数据库,让我知道它现在是另一个玩家。问题是,如果有人在转弯中杀了应用程序怎么办?我正在谈论去任务管理器并实际杀死它。

我读到onDestory并不总是被调用,所以这是不行的。我当时在思考onStop,但onStop也在其他地方被调用。那么我怎么能确定该应用程序实际上已被杀死,并且它们不仅仅是将应用程序放在后台,例如?

编辑:我还应该提到这是在片段中,我正在检查这一点,但不要认为这会产生影响。

3 个答案:

答案 0 :(得分:0)

我不确定这是否会帮助您完全解决问题,但是如果您想使用onStop()而不是onDestroy(),有一种方法可以区分对onStop()的调用,因为活动正在消亡并调用onStop(),因为它只是去了后台:

 if (this.isFinishing ())
 {
  // activity dying
 }
 else
 {
  // activity not dying just stopping
  }

但是我想指出虽然onStop()可能比onDestroy()更可靠,但它仍然无法立即被调用。根据我的经验,onStop()最终被调用,但也许一段时间之后。

答案 1 :(得分:0)

在您的示例中,没有被调用的方法。托管应用程序的Linux进程将被终止,从而在正在执行任何操作的过程中中断运行应用程序代码的Java虚拟机。应用程序结束时没有任何通知或警告 - 甚至终结器也不会运行,因为实际上并不需要任何“清理”...... Linux系统只会回收内存。

你应该做的是设计你的应用程序架构,这样如果其中一个玩家超时(应用程序被杀,网络连接中断,电池耗尽,电话从汽车中掉出来并被卡车碾过并扔进去一个湖泊,服务器能够检测超时并相应地处理情况 - 最有可能的是,让玩家轮到他并继续向前移动。

答案 2 :(得分:0)

您可以使用以下方法。当您从最近的列表中滑动应用程序时调用它:

@Override
public void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    Log.e("onDetachedFromWindow", "activity dying");
}