Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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 如何从特定片段中的活动禁用onDestroy方法?_Android_Android Fragments_Android Activity_Google Cloud Firestore - Fatal编程技术网

Android 如何从特定片段中的活动禁用onDestroy方法?

Android 如何从特定片段中的活动禁用onDestroy方法?,android,android-fragments,android-activity,google-cloud-firestore,Android,Android Fragments,Android Activity,Google Cloud Firestore,我有一个包含多个片段的活动。当用户到达最后一个片段并单击一个按钮时,他通过intent进入main活动。 这是一个多人问答应用程序,我需要更新数据库中的“回合”字段,该字段决定玩家1或2是否必须玩。此字段当前在以下情况下更新 。。。玩家正常完成测验回合(通过单击最后一个片段上的“下一步”按钮) 。。。玩家在游戏期间单击手机的后退按钮(它会打开一个警报对话框,因此当玩家选择返回主活动时,会触发“更新回合场方法”) 必须有第三个选项更新回合字段,这是一个场景:玩家开始回合,但在回合中关闭应用程序。这

我有一个包含多个片段的活动。当用户到达最后一个片段并单击一个按钮时,他通过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
方法周围。

我知道这是一个不太可能的场景,玩家在测试期间决定关闭应用程序,但我希望做好准备。因为这是一个多人游戏,我需要保存一些信息并将其发送到数据库,否则当前游戏将无法再玩了。