【问题标题】:Save Countdowntimer on activity destroy and resume it in onResume()将 Countdowntimer 保存在活动销毁并在 onResume() 中恢复
【发布时间】:2018-07-16 06:18:29
【问题描述】:

我想启动一个计数器 2 分钟,当活动破坏时我想保存它,在活动恢复时我想在我离开的地方启动计数器

counter = new CountDownTimer(120000, 1000) { // adjust the milli seconds here

        public void onTick(long millisUntilFinished)
        {
            textview.setText("" + String.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
                    TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));

            Log.i(TAG, "onTick: "+millisUntilFinished);
        }

        public void onFinish()
        {
            textview.setText("done!");
        }
    }.start();

【问题讨论】:

  • 实施 ondestroy 方法将您的数据存储在共享首选项中。

标签: android counter countdowntimer


【解决方案1】:

我们只是在活动被销毁时保存millisUntilFinished 的值,并在活动再次启动时使用该值创建新的CountDownTimer。

long millisUntilFinished;

在onDestroy()(或onStop())中

@Override
    public void onDestroy() {
        SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
        editor.putLong("millisUntilFinished", millisUntilFinished);
        editor.apply();
        super.onDestroy();
    }

当你想启动CountDownTimer 时获取millisUntilFinished 的值

        SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
        millisUntilFinished = prefs.getLong("millisUntilFinished", 120000);

        counter = new CountDownTimer(millisUntilFinished, 1000) { // adjust the milli seconds here

            public void onTick(long millisUntilFinished) {
                this.millisUntilFinished = millisUntilFinished;
                textview.setText("" + String.format("%d min, %d sec",
                        TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
                        TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)
                                - TimeUnit.MINUTES.toSeconds(
                                TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));

                Log.i(TAG, "onTick: " + millisUntilFinished);
            }

            public void onFinish() {
                textview.setText("done!");
            }
        }.start();

【讨论】:

  • 还要注意 prashant17 的回答! onDestroy() 不一定被称为例如当您按主页按钮关闭应用程序时
  • @DominicM 因为我不了解应用程序的业务,这取决于您想要什么。但我注意到正在使用 onDestroy() (或 onStop())
【解决方案2】:

将您的计数器数据存储在onStop 方法中的共享首选项中,因为onDestroy() 并不总是得到保证,并使用您在onResume 方法中存储的数据启动您的计数器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多