Android how to update value of ProgressBar?

后端 未结 4 1685
旧巷少年郎
旧巷少年郎 2021-01-12 01:46

My activity have a ProgressBar. When start activity, I\'ll check value get from another place and update to ProgressBar. Here\'s my code:

final ProgressBar p         


        
4条回答
  •  粉色の甜心
    2021-01-12 02:31

    You are running a while (progressBar.getProgress() < 100) in the UI thread (you use runOnUiThread) so UI thread will be blocked (and nothing painted) until this loop finish.

    You can:

    • Put the runOnUiThread inside the loop and, maybe, a sleep inside de runOnUiThread call. However, it is not the preferred kind of solution since you are using too much CPU to just look for a value change. The sleep approach it a bit ugly but solves the cpu problem. It would be something like::

      Thread t = new Thread() {
          public void run() {
          int oldProgress = 0;
      
          while (progressBar.getProgress() < 100) {
                  ((Activity) ctx).runOnUiThread(new Runnable() {
                      public void run() {
                          int value = Downloader.progress.get(gameId+ "");
                          if (value != oldProgress) {
                              oldProgress = value;
                              progressBar.setProgress(value);
                              progressText.setText(value + " %");
                          }
                      }
                  }
                  Thread.sleep(500);
              }
          });
        }
      };
      
    • Update the progress bar in an event way so you only call (in the UI thread) the update code when progress changes. It is the preferred way.

提交回复
热议问题