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

时间:2014-05-30 13:41:07

标签: java android timer android-activity adk

我有一个计时器类,当按下按钮时它会被调用,它开始倒计时并显示剩余时间作为按钮文本,但是当我离开活动并返回时,它们已经停止并消失。我知道为什么他们停止作为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()函数中调用timer类的代码。

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();


            }
        });
    }

次是以毫秒为单位的计时器长度数组。 buts是包含屏幕上按钮的任何数组,以便于访问。 timers是为每个按钮创建的计时器对象的数组。

3 个答案:

答案 0 :(得分:2)

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

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

  2. 使用计时器进行服务。我的应用程序中有类似的任务,我的计时器在服务中运行成功更新视图和通知。

答案 1 :(得分:0)

您可以存储在共享首选项中或将活动传递给第一个活动中初始化的开始时间值,并将该时间用作在活动中创建计时器的基础。

答案 2 :(得分:0)

使您的计时器类成为静态。它可以解决你的问题。

相关问题