Android CountDownTimer - 重新打开应用后,onTick()不会更新UI

时间:2016-01-20 22:35:27

标签: android countdowntimer

带有textView和开始/停止按钮的基本倒计时应用程序。 如果我在countDownTimer运行时关闭应用程序,它将继续工作直到完成。问题是当我重新打开应用程序时,它正在倒计时onTick()方法不更新TextView的新实例。 有没有办法使这项工作?

如果我理解正确,CountDownTimer会在它自己的服务中运行。 我的代码:

public class MainActivity extends AppCompatActivity {

    TextView display;
    Button button;
    MyCountdownTimer myTimer;
    long starTime = 15 * 1000;
    long interval = 1000;
    boolean timerIsStarted = false;

    private static final String TAG = "LogMainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myTimer = new MyCountdownTimer(starTime, interval);
        display = (TextView) findViewById(R.id.textViewID);
        button = (Button) findViewById(R.id.buttonID);
    }


    public void startButtonOnClick(View view) {
        if(!timerIsStarted){
            timerIsStarted = true;
            myTimer.start();
        } else {
            timerIsStarted = false;
            display.setText("00");
            myTimer.cancel();
        }
    }

    public class MyCountdownTimer extends CountDownTimer {

        public MyCountdownTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        @Override
        public void onTick(long millisUntilFinished) {
            Log.d(TAG, String.valueOf(millisUntilFinished));
            display.setText(String.valueOf(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)));
        }

        @Override
        public void onFinish() {
            timerIsStarted = false;
            Log.d(TAG, "Finished!");
            Toast.makeText(getApplicationContext(), "Finished!", Toast.LENGTH_SHORT).show();
            display.setText("Finished!");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是因为当用户点击按钮时你启动了countDown计时器。为了它的工作,你必须在onCreate方法中添加myTimer.start();。但请记住,它正在创建一个CountDown的新实例,这将从0开始计数。所以你必须保存最后一次然后从这个时间开始。