#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();
}