handler的使用(一)

项目1:HandlerTest

=>>HandlerActivity.java

[java]  view plain  copy
  1. package mars.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 HandlerActivity extends Activity {  
  11.     /** Called when the activity is first created. */  
  12.     //声明两个按钮控件  
  13.     private Button startButton = null;  
  14.     private Button endButton = null;  
  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.         startButton.setOnClickListener(new StartButtonListener());  
  22.         endButton = (Button)findViewById(R.id.endButton);  
  23.         endButton.setOnClickListener(new EndButtonListener());  
  24.           
  25.     }  
  26.     class StartButtonListener implements OnClickListener{  
  27.   
  28.         @Override  
  29.         public void onClick(View v) {  
  30.             //调用Handler的post方法,将要执行的线程对象添加到队列当中  
  31.             handler.post(updateThread);  
  32.         }  
  33.           
  34.     }  
  35.       
  36.     class EndButtonListener implements OnClickListener{  
  37.   
  38.         @Override  
  39.         public void onClick(View v) {  
  40.             handler.removeCallbacks(updateThread);  
  41.         }  
  42.           
  43.     }  
  44.     //创建一个Handler对象  
  45.     Handler handler  = new Handler();  
  46.     //将要执行的操作写在线程对象的run方法当中  
  47.     Runnable updateThread =  new Runnable(){  
  48.   
  49.         @Override  
  50.         public void run() {  
  51.             System.out.println("UpdateThread");  
  52.             //在run方法内部,执行postDelayed或者是post方法  
  53.             handler.postDelayed(updateThread, 3000);  
  54.         }  
  55.           
  56.     };  
  57. }  


项目2:ProgressBarHandler

=>>TestBarHandler.java

[java]  view plain  copy
  1. package mars.barhandler;  
  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 TestBarHandler extends Activity {  
  13.     /** Called when the activity is first created. */  
  14.     //声明控件变量  
  15.     ProgressBar bar = null;  
  16.     Button startButton = null;  
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.main);  
  21.         //根据控件的ID得到代表控件的对象,并为按钮设置监听器  
  22.         bar = (ProgressBar)findViewById(R.id.bar);  
  23.         startButton = (Button)findViewById(R.id.startButton);  
  24.         startButton.setOnClickListener(new ButtonListener());  
  25.     }  
  26.     //当点击startButton按钮时,就会执行ButtonListener的onClick方法  
  27.     class ButtonListener implements OnClickListener{  
  28.   
  29.         @Override  
  30.         public void onClick(View v) {  
  31.             // TODO Auto-generated method stub  
  32.             bar.setVisibility(View.VISIBLE);  
  33.             updateBarHandler.post(updateThread);  
  34.         }  
  35.           
  36.     }  
  37.     //使用匿名内部类来复写Handler当中的handleMessage方法  
  38.     Handler updateBarHandler = new Handler(){  
  39.   
  40.         @Override  
  41.         public void handleMessage(Message msg) {  
  42.             bar.setProgress(msg.arg1);  
  43.             updateBarHandler.post(updateThread);  
  44.         }  
  45.           
  46.     };  
  47.     //线程类,该类使用匿名内部类的方式进行声明  
  48.     Runnable updateThread = new Runnable(){  
  49.         int i = 0 ;  
  50.         @Override  
  51.         public void run() {  
  52.             System.out.println("Begin Thread");  
  53.             i = i + 10 ;  
  54.             //得到一个消息对象,Message类是有Android操作系统提供  
  55.             Message msg = updateBarHandler.obtainMessage();  
  56.             //将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少  
  57.             msg.arg1 = i ;  
  58.             try {  
  59.                 //设置当前显示睡眠1秒  
  60.                 Thread.sleep(1000);  
  61.             } catch (InterruptedException e) {  
  62.                 // TODO Auto-generated catch block  
  63.                 e.printStackTrace();  
  64.             }  
  65.             //将msg对象加入到消息队列当中  
  66.             updateBarHandler.sendMessage(msg);  
  67.             if( i == 100){  
  68.                 //如果当i的值为100时,就将线程对象从handler当中移除  
  69.                 updateBarHandler.removeCallbacks(updateThread);  
  70.             }  
  71.         }  
  72.     };  
  73.       
  74. }  

猜你喜欢

转载自blog.csdn.net/sinat_17775997/article/details/79913154