java - Android - 时钟滞后

标签 java android timer clock lag

我自己编写的应用程序时钟有问题...

有时会卡住。一旦卡住 2 秒,另一次最多可卡住 10 秒。时间显示正确,但不流畅...

这是我的代码:

    CDT_2 = new CountDownTimer(250, 250) {
        @Override
        public void onTick(long millisUntilFinished) {
            {
                getDate();

                int C_hours_output = C_hours - C_hours_basic;
                int C_minutes_output = C_minutes - C_minutes_basic;
                int C_seconds_output = C_seconds - C_seconds_basic;

                if (C_seconds_output < 0) {
                    C_seconds_output = C_seconds_output + 60;
                    C_minutes_output = C_minutes_output - 1;
                }
                if (C_seconds_output < 10) {
                    STR_seconds = "0"
                            + Integer.valueOf(C_seconds_output).toString();
                } else {
                    STR_seconds = Integer.valueOf(C_seconds_output)
                            .toString();
                }
                if (C_minutes_output < 0) {
                    C_minutes_output = C_minutes_output + 60;
                    C_hours_output = C_hours_output - 1;
                }
                if (C_minutes_output < 10) {
                    STR_minutes = "0"
                            + Integer.valueOf(C_minutes_output).toString();
                } else {
                    STR_minutes = Integer.valueOf(C_minutes_output)
                            .toString();
                }
                if (C_hours_output < 0) {
                    C_hours_output = 0;
                }
                if (C_hours_output < 10) {
                    STR_hours = "0"
                            + Integer.valueOf(C_hours_output).toString();
                } else {
                    STR_hours = Integer.valueOf(C_hours_output).toString();
                }
                ((TextView) acti.findViewById(R.id.TV_time_e01))
                        .setText(STR_seconds);
                ((TextView) acti.findViewById(R.id.TV_time_e0))
                        .setText(STR_minutes + ".");
                ((TextView) acti.findViewById(R.id.TV_time_e1))
                        .setText(STR_hours + ":");
            }
        }

        @Override
        public void onFinish() {
            CDT_2.start();
        }
    }.start();

提前致谢

最佳答案

CountDownTimer 类不在单独的线程上运行,因此它将时间与 UI 事件和工作分开。看这个post了解详情。

您最好使用 Handler 或 Runnable 来实现此功能。您可以使用 Activity.runOnUiThread 更新 TextView 元素

请参阅这些帖子以获取类似的解决方案:

Android: How do I display an updating clock in a TextView

Android - implement a custom timer/clock

关于java - Android - 时钟滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253612/

相关文章:

c++ - 使用 C++ 以纳秒为单位提供时间的计时器功能

java - 检查两个列表的交叉点忽略区分大小写?

Java将标准String转换为CP1250,每个字符只有一个字节

android - 类中没有 View 的 ButterKnife 7.0 BindString

android - 如何将带有odex的apk安装到模拟器?

javascript - 发送数据的时间计数器

javascript - 重置 jQuery 轮播中的计时器

java - Kibana 查询结果 _count 和 _search api 之间不匹配

java - 更改图像布局方向

android - android中EditText的多行文本对齐