即使在重新启动活动后,也要在活动中保持相同的倒数计时器

时间:2015-07-20 08:18:13

标签: android android-activity enums global countdowntimer

我正在开发一个测验android应用程序,它使用名为" question"显示问题和答案。在此活动中有一个下一个按钮,它将递增变量,问题ID,并将重新启动相同的活动。重新启动后,活动将获取变量并显示下一个问题。我的问题是我需要在此活动上显示一个计时器,但我需要它继续倒计时,即使重新启动活动。我正在考虑创建一个枚举类,它将向我发送倒计时的值,甚至是全局计时器。有什么建议??

3 个答案:

答案 0 :(得分:1)

请勿重新启动您的活动,只需更新其中的内容。

如果您已重新启动它,则可以执行以下操作:(按从最佳到最差的顺序):

  • 重新启动时在意图中提供开始时间。
  • 创建一个包含时间和时间功能的单例。
  • 让时间静止。

答案 1 :(得分:1)

您可以使用手机上的当前时间。启动计时器时,将当前时间存储在共享首选项中。重新启动活动后,您可以检索此值并将其与新的当前时间进行比较。

这样你就不必有一个活跃的倒计时器。缺点是用户可以通过改变手机上的时间来“欺骗”!

答案 2 :(得分:0)

执行此操作的一种方法是将倒计时存储在SharedPreferences对象中,但是这样做的缺点是不是非常模块化的,因为程序的所有部分都可以访问SharedPreferences对象所以你无法保证其他课程都不会以某种方式搞乱倒计时器的价值。

更加模块化的方法是将倒计时值存储在用于启动新活动的意图中。例如:

// To save the data when you start the new activity
Intent newQuestionIntent = new Intent(getApplicationContext(), MyQuizQuestion.class); 
newQuestionIntent.putExtra("question_id", myQuestionId); 
newQuestionIntent.putExtra("countdown_value", myCountdownTimerValue);
startActivity(newQuestionIntent);


// To restore the data in your new activity
@Override
protected void onCreate() {
    Bundle savedData = getIntent().getExtras();
    if (savedData.containsKey("question_id")) {
        myQuestionId = savedData.getInt("question_id"); 
    }

    if (savedData.containsKey("countdown_value")) {
        myCountdownTimerValue = savedData.getInt("countdown_value");
    }
}