Handler的使用
public class HandlerActivity extends Activity {
private Button startButton;
private Button endButton;
private ProgressBar bar; int i=0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_down);
startButton=(Button)findViewById(R.id.start);
startButton.setOnClickListener(new StartButtonListener());
bar=(ProgressBar)findViewById(R.id.progressBar1);
}
class StartButtonListener implements OnClickListener{
public void onClick(View v) {
//调用Handler的post方法,将要执行的线程对象添加到 线程 队列当中
updateBarHandler.post(updateThread);
}
}
//使用匿名内部类来复写Handler当中的handlerMessage方法
Handler updateBarHandler=new Handler(){
public void handleMessage(Message msg)
{
Log.d("1","1");
bar.setProgress(msg.arg1);
bar.setMax(100);
//把线程压入到线程队列里面去
updateBarHandler.post(updateThread);
}
};
//线程类,
该类使用匿名内部类的方式进行声明
Runnable updateThread=new Runnable() {
public void run()
{
i=i+10;
//得到一个消息对象,Message类是由android操作系统提供
Message msg=updateBarHandler.obtainMessage();
//arg1参数,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
msg.arg1=i;
try {
//设置当前线程睡眠1秒
Thread.sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
}
//将msg对象加入到消息队列当中,sendMessage方法直接到上面handlerMessage方法
//把消息压入到消息队列里面去
updateBarHandler.sendMessage(msg);
if(i==100){
//如果当i的值为100时就将线程对象从Handler中移除
updateBarHandler.removeCallbacks(updateThread);
}
}
};
}