当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。今天的例子就结合前几天学的进度条ProgressBar,用Handler更新ProgressBar. 先看最终效果图吧: 当按开始按钮时,进度条会每隔500毫秒加1,直到加到100或者按停止时停止 xml:
package com.pocketdigi;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class main extends Activity {
/** Called when the activity is first created. */
ProgressBar pb1;
Handler handle=new Handler();
//新建一个Handler对象
Button b1;
Button b2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb1=(ProgressBar)findViewById(R.id.pb1);
pb1.setProgress(0);
b1=(Button)findViewById(R.id.b1);
b1.setOnClickListener(b1Lis);
b2=(Button)findViewById(R.id.b2);
b2.setOnClickListener(b2Lis);
}
private OnClickListener b1Lis=new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.post(add);
//开始执行add
}
};
private OnClickListener b2Lis=new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.removeCallbacks(add);
//停止执行
pb1.setProgress(0);
}
};
int pro=0;
Runnable add=new Runnable(){
//定义add
@Override
public void run() {
// TODO Auto-generated method stub
pro=pb1.getProgress()+1;
pb1.setProgress(pro);
setTitle(String.valueOf(pro));
if(pro<100){
handle.postDelayed(add,500);
//如果进度小于100,,则延迟500毫秒后重复执行add
}
}
};
}