Java Android:在活动之间保持计时器运行

Java Android:在活动之间保持计时器运行,java,android,timer,android-activity,adk,Java,Android,Timer,Android Activity,Adk,我有一个timer类,当按下按钮时调用它,它开始倒计时并将剩余时间显示为按钮文本,但当我离开活动并返回时,它们停止并消失。我知道为什么它们会作为android生命周期的一部分停止,我不想简单地节省它们的时间,并在我再次进入活动时重新启动它们(就像互联网上的大多数解决方案一样)。当活动不是当前活动时,我需要计时器保持运行,以便精确到计时器所代表的实时长度。这可能吗?感谢您的帮助 计时器类,该类工作正常,需要继续运行 public class CustTimer { int length; Butt

我有一个timer类,当按下按钮时调用它,它开始倒计时并将剩余时间显示为按钮文本,但当我离开活动并返回时,它们停止并消失。我知道为什么它们会作为android生命周期的一部分停止,我不想简单地节省它们的时间,并在我再次进入活动时重新启动它们(就像互联网上的大多数解决方案一样)。当活动不是当前活动时,我需要计时器保持运行,以便精确到计时器所代表的实时长度。这可能吗?感谢您的帮助

计时器类,该类工作正常,需要继续运行

public class CustTimer {
int length;
Button button;

public CustTimer() {

}

public CustTimer(int length, Button button) {
    this.length = length;
    this.button = button;


}




public void Count() {

    new CountDownTimer(length, 1000) {

        public void onTick(long millisUntilFinished) {

            String min = String.valueOf(millisUntilFinished/60000 ); 

            long re = millisUntilFinished%60000;
            String secs = String.valueOf(re/1000); 

            button.setText(min + ":" + secs);

        }

        public void onFinish() {
            button.setText("done");
        }

    }.start();

}
}
在活动的onCreate()函数中调用计时器类的代码

for (int i = 0; i < 16; i++) {
        final int j = i;
        buts[i].setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                CustTimer t1 = new CustTimer(times[j], buts[j]);
                timers[j] = t1;
                t1.Count();


            }
        });
    }
for(int i=0;i<16;i++){
最终int j=i;
但是[i].setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
CustTimer t1=新CustTimer(次数[j],但[j]);
定时器[j]=t1;
t1.Count();
}
});
}
times是计时器长度的数组,单位为毫秒。buts是任何包含屏幕上按钮的数组,便于访问。计时器是为每个按钮创建的计时器对象数组

  • 第一个活动或应用程序类中的静态计时器。然后调用静态getTimer()方法。让它在另一个线程(而不是UI)中运行

    1a。在计时器扩展类中定义侦听器接口,并将活动作为侦听器添加到计时器实例中。在这种情况下,您可以将计时器设为单例,并在第一个活动中仅创建一次

  • for (int i = 0; i < 16; i++) {
            final int j = i;
            buts[i].setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
    
                    CustTimer t1 = new CustTimer(times[j], buts[j]);
                    timers[j] = t1;
                    t1.Count();
    
    
                }
            });
        }
    
  • 使用计时器进行服务。我的应用程序中有一个类似的任务,我的计时器在服务中运行,成功地更新了视图和通知


  • 您可以将在第一个“活动”中初始化的开始时间值存储在“共享优先级”中或传递给“活动到活动”,并将该时间用作在“活动”中创建计时器的基础。

    将计时器类设为静态。它可能会解决您的问题。

    我不想简单地保存它们的时间,并在再次进入活动时重新启动它们
    我发现这是最好的方法,因为即使应用程序被完全破坏,这也是保持计时器的唯一方法。