0

谁能告诉我这样做是否安全?我运行一个倒数计时器(CountDownTimer),当计时器达到零时,它必须重新开始,例如倒计时更长的时间。为此,我打电话

timer = new TableCount(nextTime * 1000, 100);

在 onFinish() 方法中。

它运行没有问题,但我担心它可能会导致内存泄漏。我是否应该让计时器触发某种通知它已完成?以下是活动代码中的重要部分:

public class TableActivity extends Activity {
    TableCount timer; // the count down timer
    protected int nextTime;
    ...
    // somewhere I call this - user clicked the "start" button
    timer = new TableCount(nextTime * 1000, 100);
    nextTime += 100; // for example
    ...
    public class TableCount extends CountDownTimer
    {
        public void onFinish() {
            ... // check if number of iterations has been reached, else:
            // start counting down from the next value
            timer = new TableCount(nextTime * 1000, 100);
            nextTime += 100; // for example
        }
    }
4

3 回答 3

0

您不会泄漏内存,因为您只是将 TableCount 的单个声明的引用更改为隐式取消引用前一个对象的新计时器。

即使您做了一些奇怪的事情,例如每次运行都创建一个新计时器并将其添加到数组中(例如),您仍然不会泄漏。您最终可能会耗尽内存,但这与泄漏不同,因为活动结束(),并假设您没有在其他地方持有静态引用,然后内存被释放并有资格进行垃圾收集。

但是,为什么不直接重用现有的计时器并使用 schedule() 再次运行它呢?

于 2012-11-24T10:41:31.210 回答
0

不需要再次初始化计时器......试试这个......

   int temp=nexttime;
   public class TableCount extends CountDownTimer
   {
       public void onFinish() {
       nexttime=temp;
       timer.start();
       }
   }
于 2012-11-24T10:43:04.750 回答
-1
public class ServiceCount extends CountDownTimer
{
    public ServiceCount(long millisInFuture, long countDownInterval)
    {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish()
    {
             count = new ServiceCount((long) (1 * 60 * 1000), 1000); // 1 minute
             count.start();
    }

    @Override
    public void onTick(long millisUntilFinished)
    {
        Log.d("timer", "" + millisUntilFinished / 1000);
    }
}

ServiceCount count = new ServiceCount((long) (1 * 60 * 1000), 1000); // 1 minute
count.start();
于 2012-11-24T10:45:40.813 回答