【问题标题】:Is it bad practice to loop a thread every 1s while activity is opened?在活动打开时每 1 秒循环一个线程是不好的做法吗?
【发布时间】:2019-07-05 22:27:11
【问题描述】:

我有一个应用程序,它可以处理日期和时间,还有一个进度条,它指示从一个日期到另一个日期所用时间的百分比。因此,如果 date1 是 2019-07-05 05:00 pm 并且 date2 是 2019-07-05 07:00 pm 并且当前时间是 2019-07-05 06:00 pm,那么百分比是 50%,因为 50% 的时间从保留 date1 到 date2。

在活动开始时,我计算时间百分比并使用 setProgress() 将此值设置为进度条。目前还没有问题,一切正常。我现在的问题是我是否可以创建一个线程,它会休眠 1s 然后计算新的百分比,因为当前时间已经改变,并将值设置为进度条。这将每 1 秒重复一次,直到活动完成。这是一个不好的方法吗?每 1 秒运行一次代码时,我考虑了性能。这是一个好习惯吗?我可以这样做吗?

【问题讨论】:

    标签: android loops


    【解决方案1】:

    考虑改用TimerHandler

        final Handler handler = new Handler();
    
    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            updateProgress();
            handler.postDelayed(this, 1000L);
        }
    };
    
    void doWork() {
        // do one of these, either handler or timer
        handler.post(runnable);
    
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                updateProgress();
            }
        }, 0L, 1000L);
    }
    

    【讨论】:

      【解决方案2】:

      如果它是您的应用程序的关键部分,那么它并不是很糟糕。您甚至可以每 1/60 秒循环一次,这样您的条形图就会以 60fps 的速度更新,这不会有任何问题。

      但我建议使用Timer,因为你只是每秒重复一次,而且停止它也更容易。

      【讨论】:

      • 非常感谢!我会带上计时器。
      猜你喜欢
      • 2018-04-24
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2011-06-02
      • 2018-10-19
      • 1970-01-01
      • 2020-01-24
      • 2018-05-01
      相关资源
      最近更新 更多