【问题标题】:How to dispose CountDownTimer如何处理 CountDownTimer
【发布时间】:2013-09-15 18:11:18
【问题描述】:

我有一个名为“MainActivity”的主类,我在我的应用程序中启动了几次。

private static CountDownTimer timer;
private static final long startTime = 15 * 1000;
private static final long interval = 1 * 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    timer = new StageCountDownTimer(startTime, interval);

}

private class StageCountDownTimer extends CountDownTimer {
    public StageCountDownTimer(long startTime, long interval) {
        super(startTime, interval);
    }

    @Override
    public void onFinish() {
        //STARTTING NEW ACTIVITY 
    }

    @Override
    public void onTick(long millisUntilFinished) {
    }
}

有时用户需要在倒计时结束前关闭此活动,然后再次返回此活动。然后新的倒计时正在启动,但是旧的倒计时结束时执行onFinish() 中的代码。当我启动此代码一次时,一切都很好。退出活动后如何取消/处置/销毁此计时器?我尝试了timer.cancel(),但没有任何反应。

编辑

我想我通过将 CountDownTimer 计时器设置为公共解决了我的问题,而在其他活动中我只是使用 MainActivity.timer.cancel()

【问题讨论】:

  • static CountDownTimer 在此处创建内存泄漏。

标签: android countdowntimer


【解决方案1】:

你可以使用:

if (isFinishing()) {
    CountDownTimer.cancel();
}

所以如果活动结束,倒计时将被取消。下次你打开活动时,新的倒计时就会启动。

【讨论】:

  • 如果您使用的是片段,只需将cancel()添加到onDetach()生命周期方法
【解决方案2】:

除了timer.cancel()(应该可以)之外,您还可以在计时器的onFinish() 中进行操作:

@Override
    public void onFinish() {
        if(!MainActivity.this.isFinishing()) {
             // Start new activity...
        }
    }

【讨论】:

    【解决方案3】:

    我想我通过将CountDownTimer timer 设置为public 解决了我的问题,而在其他活动中我只是使用MainActivity.timer.cancel()

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      相关资源
      最近更新 更多