android_handler(一)

 

  1. package android.handler;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.   
  10. public class HandlerTest extends Activity {  
  11.     /** Called when the activity is first created. */  
  12.     private Button startButton;  
  13.     private Button endButton;  
  14.       
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         //根据id获得控件对象  
  20.         startButton = (Button)findViewById(R.id.startButton);  
  21.         endButton = (Button)findViewById(R.id.endButton);  
  22.         //为控件设置监听器  
  23.         startButton.setOnClickListener(new StartButtonListener());  
  24.         endButton.setOnClickListener(new EndButtonListener());  
  25.     }  
  26.       
  27.     class StartButtonListener implements OnClickListener{  
  28.         public void onClick(View v) {  
  29.             //调用Handler的post()方法,将要执行的线程对象放到队列当中  
  30.             handler.post(updateThread);  
  31.         }  
  32.     }  
  33.       
  34.     class EndButtonListener implements OnClickListener{  
  35.         public void onClick(View v) {  
  36.             //调用Handler的removeCallbacks()方法,删除队列当中未执行的线程对象  
  37.             handler.removeCallbacks(updateThread);  
  38.         }  
  39.           
  40.     }  
  41.       
  42.     //创建Handler对象  
  43.     Handler handler = new Handler();  
  44.     //新建一个线程对象  
  45.     Runnable updateThread = new Runnable(){  
  46.         //将要执行的操作写在线程对象的run方法当中  
  47.         public void run(){  
  48.             System.out.println("updateThread");  
  49.             //调用Handler的postDelayed()方法  
  50.             //这个方法的作用是:将要执行的线程对象放入到队列当中,待时间结束后,运行制定的线程对象  
  51.             //第一个参数是Runnable类型:将要执行的线程对象  
  52.             //第二个参数是long类型:延迟的时间,以毫秒为单位  
  53.             handler.postDelayed(updateThread, 3000);  
  54.         }  
  55.     };  
  56. }  

 

 

 

  1. package android.handler;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.os.Message;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10. import android.widget.ProgressBar;  
  11.   
  12. public class ProgressBarHandlerTest extends Activity {  
  13.     /** Called when the activity is first created. */  
  14.       
  15.     private ProgressBar progressBar;  
  16.     private Button startButton;  
  17.       
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.           
  23.         progressBar = (ProgressBar)findViewById(R.id.progressbar);  
  24.         startButton = (Button)findViewById(R.id.startButton);  
  25.           
  26.         startButton.setOnClickListener(new ProgressBarOnClickListener());  
  27.     }  
  28.       
  29.     class ProgressBarOnClickListener implements OnClickListener{  
  30.         public void onClick(View v) {  
  31.             //设置进度条为可见状态  
  32.             progressBar.setVisibility(View.VISIBLE);  
  33.             updateBarHandler.post(updateThread);  
  34.         }  
  35.     }  
  36.       
  37.     //使用匿名内部类来复写Handler当中的handlerMessage()方法  
  38.     Handler updateBarHandler = new Handler(){  
  39.         @Override  
  40.         public void handleMessage(Message msg) {  
  41.             progressBar.setProgress(msg.arg1);  
  42.             updateBarHandler.post(updateThread);    //将要执行的线程放入到队列当中  
  43.         }  
  44.     };  
  45.       
  46.     //线程类,该类使用匿名内部类的方式进行声明  
  47.     Runnable updateThread = new Runnable(){  
  48.         int i = 0;  
  49.         public void run() {  
  50.             // TODO Auto-generated method stub  
  51.             System.out.println("Begin Thread");  
  52.             i+=10;  
  53.             //得到一个消息对象,Message类是android系统提供的  
  54.             Message msg = updateBarHandler.obtainMessage();  
  55.             //将Message对象的arg1参数的值设置为i  
  56.             msg.arg1 = i;   //用arg1、arg2这两个成员变量传递消息,优点是系统性能消耗较少  
  57.             try{  
  58.                 Thread.sleep(1000); //让当前线程休眠1000毫秒  
  59.             }catch(InterruptedException ex){  
  60.                 ex.printStackTrace();  
  61.             }  
  62.             //将Message对象加入到消息队列当中  
  63.             updateBarHandler.sendMessage(msg);  
  64.             //如果i的值等于100  
  65.             if (i == 100){  
  66.                 //将线程对象从队列中移除  
  67.                 updateBarHandler.removeCallbacks(updateThread);   
  68.             }  
  69.         }  
  70.     };  
  71. }  

你可能感兴趣的:(android)