【问题标题】:How to Update Progress Bar using Thread如何使用线程更新进度条
【发布时间】:2011-05-10 12:20:17
【问题描述】:

如何在android中使用后台线程更新进度条?它还会改变进度条的进度。请帮忙。

Android时尚

【问题讨论】:

    标签: android multithreading progress-bar


    【解决方案1】:

    我使用AsyncTask 完成了类似的任务。 AsyncTask 具有 onProgressUpdate(Integer) 方法,例如,您可以调用每次迭代或每次在 doInBackground() 期间通过调用 publishProgress() 完成进度时。

    有关详细信息,请参阅docs

    【讨论】:

      【解决方案2】:
      Thread t=new Thread()
      {
      public void run()
      {
      while(some condition)
      {
      sleep(1000);
      Message myMessage = new Message();
      myMessage.obj = "success";
      handler.sendMessage(myMessage);
      }
      }
      };
      
      
      private Handler handler=new Handler()
          {
              @Override
              public void handleMessage(Message msg)
              {
                  String result=(String)msg.obj;
                           if(result.equals("success")
                           {
                           //update progress bar here
                            }
      
                       }
              };
      

      【讨论】:

        【解决方案3】:
          // this is demonstrate how to update progress bar from a thread 
          private ProgressBar pgb;  //  is a progressBar named with pgb 
          private int progressBarStatus = 0;// is a variable named progressBarStatus and initialize by 0
          // in  onCreate  method find the ui component view horizontal prograssbar named progressBar2  
        
        
         public void load_bar(View view) // is a button OnClick
        // and i am using a thread with for loop to demonstrate a task and variable progressBarStatus  as status 
        
          pgb = (ProgressBar) findViewById(R.id.progressBar2) ;// find view by id 
        
          pgb.setMax(100); // at this point we the maximum value of a progress bar to make it full like we make 100 pices of it 
        
          pgb.setProgress(0); // initialize the progress bar with 0 % progress
        
            // progress bar handler that update the status of progress bar . without handler we cant update progress bar from thread 
        
           progressBarbHandler.post(new Runnable() {
                        public void run() {
                            pgb.setProgress(progressBarStatus);
                        } 
        

        【讨论】:

          【解决方案4】:

          使用handler,这个handler会更新进度条 你要做的是: 1)从您的线程向处理程序发送消息 2)更新处理程序中的进度条

          【讨论】:

          • 关于如何在从 Web 下载 JSON 对象时更新进度条的任何想法。几乎不需要 20 秒。时间不固定。会更少。那么如何增加进度条的进度呢?
          • @AndroidVogue:你能提供你的代码示例吗?以便我可以帮助您
          • 您可以在线程中做的另一件事是使用yourActivity.this.runOnUiThread(new Runnable(){ public void run(){ /* update your progress bar here */ }})
          【解决方案5】:
          private ProgressBar pgb;
          private TextView textview;
          private int progressBarStatus = 0;
          private Handler progressBarbHandler = new Handler();
          
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_next);
              pgb = (ProgressBar) findViewById(R.id.progressBar2) ;
          }
          
          public void load_bar(View view)
          {
              pgb.setMax(100);
              pgb.setProgress(0);
          
              new Thread(new Runnable() {
                  @Override
                  public void run() {
                      for (progressBarStatus = 0; progressBarStatus <= 100; progressBarStatus++) {
          
                          progressBarbHandler.post(new Runnable() {
                              public void run() {
                                  pgb.setProgress(progressBarStatus);
                              }
                          });
          
          
                          try {
                              Thread.sleep(50);
                          } catch (Exception ex) {
                          }
                      }
                  }
              }).start();
          }
          

          【讨论】:

            【解决方案6】:

            使用 Thread 你可以这样做,只需调用 oncreate 方法中的函数

            public void loadProgressbar()
            {
                progressBar.setMax(100);
                progressBar.setProgress(0);
            
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for (progress = 0; progress <= 100; progress++) {
            
                            handler.post(new Runnable() {
                                public void run() {
                                    progressBar.setProgress(progress);
                                }
                            });
            
            
                            try {
                                Thread.sleep(50);
                            } catch (Exception ex) {
                            }
                        }
                    }
                }).start();
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-05-22
              • 2015-07-30
              • 1970-01-01
              • 2013-04-29
              • 1970-01-01
              • 2017-08-04
              相关资源
              最近更新 更多