方法一
Timer与TimerTask(Java实现)

[java] view plaincopy
public class timerTask extends Activity{    
   
    private int recLen = 11;    
    private TextView txtView;    
    Timer timer = new Timer();    
   
    public void onCreate(Bundle savedInstanceState){    
        super.onCreate(savedInstanceState);    
            
        setContentView(R.layout.timertask);    
        txtView = (TextView)findViewById(R.id.txttime);    
            
        timer.schedule(task, 1000, 1000);       // timeTask    
    }       
   
    TimerTask task = new TimerTask() {    
        @Override    
        public void run() {    
   
            runOnUiThread(new Runnable() {      // UI thread    
                @Override    
                public void run() {    
                    recLen--;    
                    txtView.setText(""+recLen);    
                    if(recLen < 0){    
                        timer.cancel();    
                        txtView.setVisibility(View.GONE);    
                    }    
                }    
            });    
        }    
    };    
}   


方法二
TimerTask与Handler(不用Timer的改进型)

public class timerTask extends Activity{    
    private int recLen = 11;    
    private TextView txtView;    
    Timer timer = new Timer();    
   
    public void onCreate(Bundle savedInstanceState){    
        super.onCreate(savedInstanceState);    
   
        setContentView(R.layout.timertask);    
        txtView = (TextView)findViewById(R.id.txttime);    
   
        timer.schedule(task, 1000, 1000);       // timeTask    
    }       
   
    final Handler handler = new Handler(){    
        @Override    
        public void handleMessage(Message msg){    
            switch (msg.what) {    
            case 1:    
                txtView.setText(""+recLen);    
                if(recLen < 0){    
                    timer.cancel();    
                    txtView.setVisibility(View.GONE);    
                }    
            }    
        }    
    };    
   
    TimerTask task = new TimerTask() {    
        @Override    
        public void run() {    
            recLen--;    
            Message message = new Message();    
            message.what = 1;    
            handler.sendMessage(message);    
        }    
    };    
}   


方法三

Handler与Message(不用TimerTask)  
  
public class timerTask extends Activity{    
    private int recLen = 11;    
    private TextView txtView;    
   
    public void onCreate(Bundle savedInstanceState) {      
        super.onCreate(savedInstanceState);      
   
        setContentView(R.layout.timertask);     
        txtView = (TextView)findViewById(R.id.txttime);    
   
        Message message = handler.obtainMessage(1);     // Message    
        handler.sendMessageDelayed(message, 1000);    
    }      
   
    final Handler handler = new Handler(){    
   
        public void handleMessage(Message msg){         // handle message    
            switch (msg.what) {    
            case 1:    
                recLen--;    
                txtView.setText("" + recLen);    
   
                if(recLen > 0){    
                    Message message = handler.obtainMessage(1);    
                    handler.sendMessageDelayed(message, 1000);      // send message    
                }else{    
                    txtView.setVisibility(View.GONE);    
                }    
            }    
   
            super.handleMessage(msg);    
        }    
    };    
}   

 

方法四
Handler与Thread(不占用UI线程)

public class timerTask extends Activity{    
    private int recLen = 0;    
    private TextView txtView;    
   
    public void onCreate(Bundle savedInstanceState){    
        super.onCreate(savedInstanceState);    
   
        setContentView(R.layout.timertask);    
        txtView = (TextView)findViewById(R.id.txttime);    
            
        new Thread(new MyThread()).start();         // start thread    
    }       
   
    final Handler handler = new Handler(){          // handle    
        public void handleMessage(Message msg){    
            switch (msg.what) {    
            case 1:    
                recLen++;    
                txtView.setText("" + recLen);    
            }    
            super.handleMessage(msg);    
        }    
    };    
   
    public class MyThread implements Runnable{      // thread    
        @Override    
        public void run(){    
            while(true){    
                try{    
                    Thread.sleep(1000);     // sleep 1000ms    
                    Message message = new Message();    
                    message.what = 1;    
                    handler.sendMessage(message);    
                }catch (Exception e) {    
                }    
    

方法五
Handler与Runnable(最简单型)    
  
public class timerTask extends Activity{    
    private int recLen = 0;    
    private TextView txtView;    
   
    public void onCreate(Bundle savedInstanceState){    
        super.onCreate(savedInstanceState);    
   
        setContentView(R.layout.timertask);    
        txtView = (TextView)findViewById(R.id.txttime);    
        runnable.run();   
    }       
   
    Handler handler = new Handler();    
    Runnable runnable = new Runnable() {    
        @Override    
        public void run() {    
            recLen++;    
            txtView.setText("" + recLen);    
            handler.postDelayed(this, 1000);    
        }    
    };    
}   

计时与倒计时
 方法1,方法2和方法3,都是倒计时
 方法4,方法5,都是计时
 计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较
 方法1,方法2和方法3,都是在UI线程实现的计时;
 方法4和方法5,是另开Runnable线程实现计时

 实现方式比较
 方法1,采用的是Java实现,即Timer和TimerTask方式;
 其它四种方法,都采用了Handler消息处理

 推荐使用
 如果对UI线程交互要求不很高,可以选择方法2和方法3
如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理

方法5,综合了前几种方法的优点,是最简的

更多相关文章

  1. Android 获取网络图片方法
  2. android 游戏 Canvas 常用方法
  3. Android中为Button注册监听器最常用的两种方法
  4. Android 保留两位小数点的4种方法
  5. Android MultiDex 解决 64K 限制,方法数超过65535解决方法

随机推荐

  1. 做了一个android小应用LEDTorch
  2. Android正加强对全球智能手机市场的控制
  3. Android屏蔽Home按键
  4. NDK编程入门
  5. Android学习之ListView控件
  6. Android(安卓)Handler鏈哄埗
  7. 总结一下各大开发板android烧写方式
  8. [置顶] [Android(安卓)Studio 权威教程]多
  9. Android(安卓)项目模块化开发,提高开发效
  10. Android(安卓)不可缺少的异步(Thread、Han