Android 如何从特定片段中的活动禁用onDestroy方法?
我有一个包含多个片段的活动。当用户到达最后一个片段并单击一个按钮时,他通过intent进入main活动。 这是一个多人问答应用程序,我需要更新数据库中的“回合”字段,该字段决定玩家1或2是否必须玩。此字段当前在以下情况下更新 。。。玩家正常完成测验回合(通过单击最后一个片段上的“下一步”按钮) 。。。玩家在游戏期间单击手机的后退按钮(它会打开一个Android 如何从特定片段中的活动禁用onDestroy方法?,android,android-fragments,android-activity,google-cloud-firestore,Android,Android Fragments,Android Activity,Google Cloud Firestore,我有一个包含多个片段的活动。当用户到达最后一个片段并单击一个按钮时,他通过intent进入main活动。 这是一个多人问答应用程序,我需要更新数据库中的“回合”字段,该字段决定玩家1或2是否必须玩。此字段当前在以下情况下更新 。。。玩家正常完成测验回合(通过单击最后一个片段上的“下一步”按钮) 。。。玩家在游戏期间单击手机的后退按钮(它会打开一个警报对话框,因此当玩家选择返回主活动时,会触发“更新回合场方法”) 必须有第三个选项更新回合字段,这是一个场景:玩家开始回合,但在回合中关闭应用程序。这
警报对话框
,因此当玩家选择返回主活动时,会触发“更新回合场方法”)
必须有第三个选项更新回合字段,这是一个场景:玩家开始回合,但在回合中关闭应用程序。这意味着目前我的数据库中的“回合”字段没有得到更新,这意味着在我的代码中,两个玩家都不能恢复游戏。我想通过在用户决定关闭应用程序时更新回合字段来避免这种情况
在片段中有一个ProgressBar
,当用户意外关闭应用程序时,它仍在运行,我是在片段的onStop
方法中这样做的。因此,我无法在活动中调用onStop
方法来更新数据库中的字段,因此我想知道是否有一种方法可以在不调用onStop方法的情况下实现所需的结果
以下是我的活动,我当前使用的方法更新onDestroy方法中Firestore中的一些字段:
...
// When the user clicks the phones back button during the game an alert window opens to aks if he is sure to exit the game
public void onBackPressed() {
AlertDialog();
}
public void AlertDialog() {
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeGame();
Intent i = new Intent(GameActivity.this, MainActivity.class);
startActivity(i);
finish();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
updateGameStatus();
}
protected void updateGameStatus() {
collectionRef.document(gameId).collection("Round").document("Round").update("round", roundValue + 1)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
}
});
}
...
。。。
//当用户在游戏期间单击phones back按钮时,如果确定要退出游戏,aks将打开一个警报窗口
public void onBackPressed(){
AlertDialog();
}
public-void-AlertDialog(){
yes.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
closeGame();
意图i=新意图(GameActivity.this,MainActivity.class);
星触觉(i);
完成();
}
});
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
updateGameStatus();
}
受保护的void updateGameStatus(){
collectionRef.document(gameId)。集合(“圆形”)。文档(“圆形”)。更新(“圆形”,roundValue+1)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
}
});
}
...
有什么好办法可以达到我想要的结果吗
如果您需要更多信息,请告诉我
我非常感谢任何提示
所以最后我需要一种方法来保存游戏状态,以防
用户关闭应用程序
你需要保存游戏状态onStop(),因为只有当用户通过调用finish()正确关闭应用程序时,才会调用onDestroy。但谁会像这样关上它呢?)
如果用户折叠应用程序并将其从手机存储器中取出,则手机将永远无法拨打电话 由于无法在特定片段上禁用onDestroy,我将代码逻辑安排在存放片段的活动的
onDestroy
方法周围。我知道这是一个不太可能的场景,玩家在测试期间决定关闭应用程序,但我希望做好准备。因为这是一个多人游戏,我需要保存一些信息并将其发送到数据库,否则当前游戏将无法再玩了。