方法1:
Timer与TimerTask(Java实现)

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

方法2:
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);            }        };    } 

方法3:
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);            }        };    }

方法4:
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) {                    }             }        }    }}

方法5:
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);            handler.postDelayed(runnable, 1000);        }           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的ndk修改app_platform的方法,亲测绝对可行
  2. H5调android 的方法修改UI无效
  3. Android程序——退出程序的时候杀死所有进程的一个方法
  4. Android中子线程网络查看器与Handler消息处理器
  5. android http协议post请求方式
  6. android 串口通信,蓝牙通信等需要输出十六进制数据的方法
  7. Android 下保持屏幕常亮的实现方法
  8. kotlin 开发 android 程序中网络http请求和线程的使用
  9. 关于android主线程不能访问网络异常NetworkOnMainThreadExceptio

随机推荐

  1. Android存储系统之架构篇
  2. Android中EventBus(事件总线)传递数据
  3. Android(安卓)盘点所有Dialog 对话框 大
  4. Android(安卓)数据存储(三) 数据库存储
  5. Android中图像的几何变化中Matrix的使用
  6. Android之——JNI初探
  7. android recovery模式及ROM制作
  8. Learning Android(安卓)第1章 - 工欲善其
  9. Android---多线程的处理
  10. AndroidUI设计之布局-详细解析布局实现