4

已经从 onCreate 方法启动了我的计时器。即使我的活动停止,计时器也会继续运行。怎么可能?

onTick() 方法显示 Toast,Thread 为主线程。我想,当 Activity 停止时,主线程会停止。任何人都可以对此进行解释。

CustomCountDownTimer.java

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

        @Override
        public void onTick(long millisUntilFinished) {
            // TODO Auto-generated method stub

        long seconds=millisUntilFinished/1000;
        long hours=seconds/(60*60);
        long remainingSeconds=seconds%(60*60);
        long minutes=remainingSeconds/60;
        remainingSeconds=remainingSeconds%60; 

        Toast.makeText(HomeActivity.this, Thread.currentThread().getName()+"", Toast.LENGTH_LONG).show();


        btnStatusMessage.setText(hours+" hr "+minutes+" min "); 

        }
4

5 回答 5

3

使用此代码取消计时器,

  timer.cancel();       
于 2013-10-18T06:35:53.243 回答
1

计时器与活动无关。您需要在 Activity 的状态方法之一(onPause/onStop/etc')中停止它。

于 2013-10-18T06:34:23.730 回答
1

您应该将此代码添加到您的活动中。

public void onDestroy(){
    super.onDestroy();
    timer.cancel();  
}
于 2013-10-18T06:42:00.397 回答
0
1.Use flage to check timer is already running

if (!timerHasStarted) {
    countDownTimer.start();
    timerHasStarted = true;
    btnStatusMessage.setText("STOP");
    } else {
    countDownTimer.cancel();
    timerHasStarted = false;
    btnStatusMessage.setText("RESTART");
    }
于 2013-10-18T06:47:23.387 回答
0

只需添加到您的活动中

@Override
public void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    mHandler.removeCallbacks(mUpdateTimeTask);//mHandler (Handler) and mUpdateTimeTask (Runnable)
}

不要忘记添加这个:

mHandler.removeCallbacks(mUpdateTimeTask);

在你也调用意图之前

回家,这会帮助你

于 2013-10-18T07:26:50.293 回答