今天给大家介绍几个Android中实现计时和倒计时的几种方法,这几种方法也许今后会帮上大家,现贴出来如下:

方法一

Timer与TimerTask(Java实现)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 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的改进型)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 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)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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线程)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 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(最简单型)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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消息处理

http://www.itivy.com/android/archive/2011/10/25/some-method-android-timer.html

更多相关文章

  1. 【Android】Android实现截取当前屏幕图片并保存至SDCard
  2. Android设备唯一标识ID的获取
  3. Android核心库
  4. Android经典蓝牙和Ble蓝牙的对比
  5. android:屏幕自适应
  6. Android帧布局实现霓虹灯的效果
  7. android调用camera实现自定义照相
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)8.1 中Systemui中的常见修
  2. android-apt和annotationProcessor的使用
  3. Android(安卓)Studio 开发自己的SDK
  4. EditText去掉光标下划线以及点击隐藏hint
  5. Android之RecyclerView巧用payload实现局
  6. android 沉浸式布局学习
  7. layout_gravity部局的一些问题
  8. Android连续点击两次Back键退出程序
  9. getSystemService
  10. Android: 渠道号获取