我正在编写一个玩家轮流投入的游戏。在回合结束时,我将数据发送到服务器并更新我的数据库,让我知道它现在是另一个玩家。问题是,如果有人在转弯中杀了应用程序怎么办?我正在谈论去任务管理器并实际杀死它。
我读到onDestory并不总是被调用,所以这是不行的。我当时在思考onStop,但onStop也在其他地方被调用。那么我怎么能确定该应用程序实际上已被杀死,并且它们不仅仅是将应用程序放在后台,例如?
编辑:我还应该提到这是在片段中,我正在检查这一点,但不要认为这会产生影响。
答案 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");
}