java - Android 中的倒计时器不同步?

标签 java android calendar count

我正在尝试制作一个倒计时器。我想出了这段代码,最初我认为它有效。但是,当我运行该应用程序时,发生了两件事,我不知道如何修复......

  1. 它不同步,虽然它是系统时间和日期,但它说只剩下 60 天而不是 61 天,而我知道是 61 天!!
  2. 如果我关闭应用程序并返回,它会重置计数器...

对此的任何帮助将不胜感激,这不是为了任何特别的事情,只是一个个人项目。

public class MainActivity extends Activity {

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

        final TextView dateBx = (TextView) findViewById(R.id.textView1);
        final TextView mTextField = (TextView) findViewById(R.id.mTextField);
        final TextView minBx = (TextView) findViewById(R.id.minBx);
        final TextView hourBx = (TextView) findViewById(R.id.hourBx);

        //set todays date
        DateFormat dateFormat1 = new SimpleDateFormat("dd/MM/yyyy");
        Calendar cal1 = Calendar.getInstance();
        //target date
        DateFormat dateFormat2 = new SimpleDateFormat("dd/MM/yyyy");
        Calendar cal2 = Calendar.getInstance();
        cal2.set(2012,11,25);
        //set maths
        long time1 = cal1.getTimeInMillis();
        long time2 = cal2.getTimeInMillis();
        //difference variable
        long diff = time2 - time1;
        //equations
        long diffSec = diff / 1000;
        long dMins = diff / (60 * 1000);
        long dHour = diff / (60 * 60 * 1000);
        long dDay = diff / (24 * 60 * 60 * 1000);

       new CountDownTimer(diff, 1000) 
       {

             public void onTick(long millisUntilFinished) 
             {
                 mTextField.setText("Seconds remaining: " + millisUntilFinished / 1000);
                 dateBx.setText("Days remaining: " + millisUntilFinished / (24 * 60 * 60 * 1000));
                 minBx.setText("Minutes remaining: " + millisUntilFinished / (60 * 1000));
                 hourBx.setText("hours remaining: " + millisUntilFinished / (60 * 60 * 1000));
             }

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



}

我的代码是我在 java 和 android 中学到的一些东西的组合,如果您想到更好的方法来完成所有这些,请告诉我:)

谢谢

最佳答案

Android 不是实时操作系统,因此您可以算出您的计时器将恰好每 1000 毫秒运行一次。

最实用的方法是,对于每次调用,获取当前日期,获取目标日期,然后重新计算剩余的天/小时/分钟/秒(就像您在应用程序开始时所做的那样)。

这也可以解决您关闭/打开应用程序时的问题。

关于java - Android 中的倒计时器不同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077935/

相关文章:

android - 添加 2 年重复事件

java - 创建函数以便当前日期以字符串格式显示且没有时间戳的最有效方法是什么?

java - Java实时应用的纵向扩展

java - RESTful : What is the difference between ClientProperties. CONNECT_TIMEOUT 和 ClientProperties.READ_TIMEOUT 在 Jersey ?

Android:如何在不使用android sdk工具的情况下在设备上安装apk

android - 在 recyclerview 中保留 edittext 内容

ASP.NET Ajax 日历

java - 如何注册多个Spring配置文件?

Java Swing 使用箭头按钮发送导航命令

android - 可以将动态壁纸设置为背景吗?