Java 如果应用程序关闭,如何在应用程序中创建持续的倒计时计时器?

Java 如果应用程序关闭,如何在应用程序中创建持续的倒计时计时器?,java,android,time,Java,Android,Time,我正在创建一个游戏,它使用“能量点”作为货币来执行游戏中的某些操作(你必须花费能量点来执行某些任务)。当玩家达到零能量点,或者没有足够的能量完成某项任务时,我认为他们应该等待几个小时才能继续,或者观看视频以快速获得分数 这应具有以下特点: 我使用以下代码创建了一个弹出对话框。如果条件energyCost

我正在创建一个游戏,它使用“能量点”作为货币来执行游戏中的某些操作(你必须花费能量点来执行某些任务)。当玩家达到零能量点,或者没有足够的能量完成某项任务时,我认为他们应该等待几个小时才能继续,或者观看视频以快速获得分数

这应具有以下特点:

我使用以下代码创建了一个弹出对话框。如果条件
energyCost
,则会自然调用函数
showPopupDialog()

 public void showPopupDialog(){
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle("Not Enough Energy!");
        dialog.setMessage("You don't have enough Energy Points to do this! 
 Would you like to watch a video to get more Energy?");
        ((AlertDialog.Builder) dialog).setPositiveButton("Watch", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //ad plays here  
                energyPoints = energyPoints + 500;
                ep.setText(energyPoints+"");
            }
        });
        ((AlertDialog.Builder) dialog).setNegativeButton("Wait", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                new CountDownTimer(30000, 1000) {

                    public void onTick(long millisUntilFinished) {
                    }

                    public void onFinish() {
                        energyPoints = energyPoints+500;
                        ep.setText(energyPoints+"");
                    }
                }.start();
            }
        });
        dialog.show();

    }
我想知道如何进行以下修改:

  • 即使应用程序关闭或我离开活动,倒计时计时器也应保持不变。所以当我4小时后回来时,一些能量点会被恢复

  • 当前计时器正在运行时,不能单击“等待”(从而触发另一个计时器)。您必须等待分配的时间,然后才能再次单击它

  • 等待结束时,游戏会发送通知,以便玩家知道继续


准确地说,最简单的方法是服务器/客户端交互,这样您就不能仅仅通过将时间设置为4h来操纵时间


如果操作对您来说是可以的,那么只需读取/写入外部文件中设置的最新时间。

在不了解大量代码的情况下,我将提出一个概念

将计时器本身用于表示目的,但对于真正的工作逻辑,请创建一个时间戳“last poinst added”或类似的内容

这将允许您在每次需要使用、显示或获取实际点数时,获取最后一个时间戳,将其与当前时间进行比较,并相应地采取行动。例如,我检查最后一个,当比较时,差值为3h。如果每十分钟我有5分,我会做3*60/10*5=获得的总分

这将允许我们只关注时间已经过去的事实,而不是制作计时器


然后,当应用程序关闭时,您存储最后一个时间戳,当重新打开时,再次比较它并相应地采取行动。

当最后一个能量点恢复时存储持久性,当您恢复应用程序时-检查经过了多少时间,并添加相应的能量库,我实际上没有想到这一点。我的应用程序相当简单,到目前为止大部分都是在客户端完成的。但是,是的,我想我也可以用其他方式来获得时间,这样他们就不会欺骗系统了。