(个人经验,仅供参考,错误之处,敬请谅解)
实现方式
- Timer定时器
private void setCurrentProgress() {
timer=new Timer();
task=new TimerTask() {
@Override
public void run() {
Thread t=new Thread(){
@Override
public void run() {
super.run();
progressBar.setProgress(progress);
progress++;
if(progress==100){
task.cancel();
timer.cancel();
task=null;
timer=null;
}
}
};
runOnUiThread(t);
}
};
timer.schedule(task,1000,1000);
}
//该方法并不推荐,容易造成线程阻塞
- Handler处理
private void setCurrentProgress() {
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
progressBar.setProgress(msg.arg1);
}
};
new Thread(){
@Override
public void run() {
super.run();
while (progress<100) {
progress++;
Message msg=handler.obtainMessage();
msg.arg1=progress;
handler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
- AsyncTask异步任务
private void setCurrentProgress() {
new MyTask().execute();
}
class MyTask extends AsyncTask{
@Override
protected Object doInBackground(Object[] params) {
while (progress<100){
progress++;
publishProgress(progress);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Object[] values) {
super.onProgressUpdate(values);
progressBar.setProgress((Integer) values[0]);
}
}