简体   繁体   English

恢复倒数计时器android

[英]Resume countdown timer android

I am new to android programming and am trying resume countdown timer in my android app after the app regains focus. 我是android编程的新手,正在重新获得焦点后尝试在我的android应用中恢复倒数计时器。 How do i get a saved instance of the current state of the timer which should be resumed when the user comes back into the application? 我如何获取计时器的当前状态的已保存实例,当用户重新进入应用程序时应恢复该实例?

Here is my code: 这是我的代码:

private long resume_timer;
    MainActivity.CounterClass count_timer;
    TextView timer;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_advanced);
    count_timer = new MainActivity.CounterClass(180000, 1000);
            count_timer.start();
           public class CounterClass extends CountDownTimer {
            public CounterClass(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
                // TODO Auto-generated constructor stub
            }

            @Override
            public void onTick(long millisUntilFinished) {
    // TODO Auto-generated method stub
    resume_timer = millisUntilFinished;
                long millis = millisUntilFinished;
                String hms = String.format(Locale.getDefault(),
                        "%02d:%02d:%02d",
                        TimeUnit.MILLISECONDS.toHours(millis),
                        TimeUnit.MILLISECONDS.toMinutes(millis)
                                - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS
                                .toHours(millis)),
                        TimeUnit.MILLISECONDS.toSeconds(millis)
                                - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS
                                .toMinutes(millis)));
                timer.setText(hms);
            }

      @Override
            public void onFinish() {
                timer.setText("time's up!!");
                 }
      @Override
        protected void onPause() {
            count_timer.cancel();
            super.onPause();
        }
     @Override
        protected void onResume() {
            // how do i resume timer here? this logic dot work.
 count_timer = new MainActivity.CounterClass(resume_timer, 1000);
            count_timer.start();
            super.onResume();
        }

I resolved this by taking advantage of the activity life cycle as shown below: 我通过利用活动生命周期来解决此问题,如下所示:

private long resume_timer;
    MainActivity.CounterClass count_timer;
    TextView timer;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_advanced);
    count_timer = new MainActivity.CounterClass(180000, 1000);
            count_timer.start();
           public class CounterClass extends CountDownTimer {
            public CounterClass(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
                // TODO Auto-generated constructor stub
            }

            @Override
            public void onTick(long millisUntilFinished) {
    // TODO Auto-generated method stub
    resume_timer = millisUntilFinished;
                long millis = millisUntilFinished;
                String hms = String.format(Locale.getDefault(),
                        "%02d:%02d:%02d",
                        TimeUnit.MILLISECONDS.toHours(millis),
                        TimeUnit.MILLISECONDS.toMinutes(millis)
                                - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS
                                .toHours(millis)),
                        TimeUnit.MILLISECONDS.toSeconds(millis)
                                - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS
                                .toMinutes(millis)));
                timer.setText(hms);
            }

      @Override
            public void onFinish() {
                timer.setText("time's up!!");
                 }
      @Override
        protected void onPause() {
            count_timer.cancel();
            super.onPause();
        }

    @Override
    protected void onRestart() {
        //resume timer when user comes back to the app
        count_timer = new MainActivity.CounterClass(resume_timer, 1000);
        count_timer.start();
        super.onRestart();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM