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);    

    }   

  }  

 };

}

posted @ 2012-09-29 10:31  言程序  阅读(177)  评论(0)    收藏  举报