postDelayed方法和removeCallbacks方法的使用(1)

《Android学习精要》第6章Broadcast、Service服务及Handle对象,本章介绍Android的核心组件Service,通过Service这种技术可以在系统的后台进行一些隐藏性任务的执行,前台用户并不会体会到程序在运行,这种技术通常用在一些计划任务中,Android的4大组件Service在实现这一功能时的使用率非常高,而要实现一个功能完善的软件不可能不用到Service。本节为大家介绍postDelayed方法和removeCallbacks方法的使用。

AD:2014WOT全球软件技术峰会北京站 课程视频发布

6.4.2  postDelayed方法和removeCallbacks方法的使用(1)

方法postDelayed的作用是延迟多少毫秒后开始运行,而removeCallbacks方法是删除指定的Runnable对象,使线程对象停止运行。

方法声明如下:

 
    
  1. public final boolean postDelayed (Runnable r, long delayMillis) 

其中参数Runnable r在Handler对象所运行的线程中执行。

创建名称为handler2的Android项目,Main.java的核心代码如下:

 
    
  1. public class Main extends Activity {  
  2.     private Button button1;  
  3.     private Button button2;  
  4.  
  5.     private Handler handler = new Handler();  
  6.  
  7.     private int count = 0;  
  8.  
  9.     private Runnable runnableRef = new Runnable() {  
  10.         public void run() {  
  11.             Log.v("2", Thread.currentThread().getName());  
  12.             count++;  
  13.             Log.v("!", "count=" + count);  
  14.             handler.postDelayed(runnableRef, 1000);  
  15.         }  
  16.     };  
  17.  
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.  
  23.         Log.v("1", Thread.currentThread().getName());  
  24.  
  25.         button1 = (Button) this.findViewById(R.id.button1);  
  26.         button2 = (Button) this.findViewById(R.id.button2);  
  27.  
  28.         button1.setOnClickListener(new OnClickListener() {  
  29.             public void onClick(View arg0) {  
  30.                 Thread thread = new Thread(runnableRef);  
  31.                 thread.start();  
  32.                 Log.v("!!!!!!!!!!!!!", "end");  
  33.             }  
  34.         });  
  35.  
  36.         button2.setOnClickListener(new OnClickListener() {  
  37.             public void onClick(View arg0) {  
  38.                 handler.removeCallbacks(runnableRef);  
  39.             }  
  40.         });  
  41.  
  42.     }  
  43. }  

程序运行后单击button1按钮开始循环,count累加1,运行结果如图6.41所示。
 
图6.41  循环加1效果

你可能感兴趣的:(android)