Как обновить индикатор выполнения с помощью потока

#android #multithreading #progress-bar

#Android #многопоточность #индикатор выполнения

Вопрос:

Как обновить индикатор выполнения с помощью фонового потока в Android? Это также изменило бы прогресс в индикаторе выполнения. Пожалуйста, помогите.

AndroidVogue

Ответ №1:

Я выполнил аналогичную задачу с помощью AsyncTask . AsyncTask имеет метод onProgressUpdate(Integer) , который вы можете вызывать, например, на каждой итерации или каждый раз, когда выполняется прогресс во время doInBackground() вызова publishProgress() .

Обратитесь к документам для получения более подробной информации.

Ответ №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:

Используйте обработчик, этот обработчик обновит индикатор выполнения, вам нужно сделать это: 1) отправить сообщение обработчику из вашего потока 2) обновить индикатор выполнения в обработчике

Комментарии:

1. Есть идеи о том, как обновить индикатор выполнения при загрузке объекта JSON из Интернета. это занимает едва ли 20 секунд. Время не фиксировано. Это было бы меньше. Итак, как увеличить прогресс в progressbar?

2. @AndroidVogue: можете ли вы предоставить образец вашего кода? чтобы я мог вам помочь

3. еще одна вещь, которую вы можете сделать в своем потоке, это использовать 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:

Используя поток, вы можете сделать это следующим образом, просто вызовите функцию в методе 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();
}