Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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
Java 如何在活动恢复时重置倒计时?_Java_Android - Fatal编程技术网

Java 如何在活动恢复时重置倒计时?

Java 如何在活动恢复时重置倒计时?,java,android,Java,Android,我的倒计时计时器不使用常量值,因为下一个级别的时间不同。所以我在第一个级别使用设置为150000的timeCount变量: long timeCount = 150000; public String formatTime(long millis) { String output = "00:00"; long seconds = millis / 1000;

我的倒计时计时器不使用常量值,因为下一个级别的时间不同。所以我在第一个级别使用设置为150000的timeCount变量:

    long timeCount = 150000;

public String formatTime(long millis) {  
                    String output = "00:00";  
                    long seconds = millis / 1000;  
                    long minutes = seconds / 60;  

                    seconds = seconds % 60;  
                    minutes = minutes % 60;  

                    String sec = String.valueOf(seconds);  
                    String min = String.valueOf(minutes);  

                    if (seconds < 10)  
                        sec = "0" + seconds;  
                    if (minutes < 10)  
                        min= "0" + minutes;  

                    output = min + " : " + sec;  
                    return output;
                }
因此,当游戏结束时,我会弹出一个窗口,按下OK键后,下一个关卡就会打开。我调用弹出窗口并为时间和其他内容设置新值:

Intent i = new Intent(Kviz.this, Popup_nivoi.class);
            if(level==2){
                numberOfQuestions = 13;
                timeCount = 160000;
                greska = 7;
                level++;
}
brojacVremena.cancel();
            startActivityForResult(i, MY_REQUEST2);

但我的倒计时总是从旧时间开始,150000毫秒。如何重置它,因为更改timeCount值不起作用。我不知道为什么。该变量已更改,我可以肯定,但倒计时计时器不使用它。

您不能在已创建的
CountDownTimer
中重置时间。它是不可变的对象,您的
timeCount
变量在创建此对象时仅使用一次。所以你需要做的就是用新的时间创建另一个计时器

UPD:以下是一些代码

public class MyCount extends CountDownTimer {
     public MyCount(long millisInFuture, long countDownInterval) {
         super(millisInFuture, countDownInterval);
     }

     public void onFinish() {
         finish();
     }

     public void onTick(long millisUntilFinished) {
         vreme.setText("" + formatTime(millisUntilFinished));
     }
}
MyCount brojacVremena = new MyCount(timeCount, 1000);
然后,当你需要新的计时器时,你只需要写

brojacVremena=新的MyCount(timeCount,1000)


使用新的
timeCount
变量。

可能在您的
活动的
onResume
方法中?您阅读了更多关于活动生命周期的内容:您是否阅读了我的问题?我知道什么是onResume方法,我只是不知道我应该在其中做些什么来解决我的问题。你可以回答我,我有20级。所以我需要20个计时器??是的,没错,但你不必把它们都记在记忆里。一旦你需要新的计时器,你可以用它代替旧的计时器。你能帮我找出代码吗?我可以用我的主定时器代码来处理所有定时器?非常感谢。你提到“你不必把它们都记在记忆里”。如何做到这一点?这意味着您只有一个计时器字段,每次为其分配新实例时,意味着旧实例将被垃圾收集。所以,如果你像我描述的那样做了,那么一切都是好的,你没有把它们都保存在内存中。
public class MyCount extends CountDownTimer {
     public MyCount(long millisInFuture, long countDownInterval) {
         super(millisInFuture, countDownInterval);
     }

     public void onFinish() {
         finish();
     }

     public void onTick(long millisUntilFinished) {
         vreme.setText("" + formatTime(millisUntilFinished));
     }
}
MyCount brojacVremena = new MyCount(timeCount, 1000);