实现Android计时与倒计时方法
16lz
2022-01-13
今天给大家介绍几个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
更多相关文章
- 【Android】Android实现截取当前屏幕图片并保存至SDCard
- Android设备唯一标识ID的获取
- Android核心库
- Android经典蓝牙和Ble蓝牙的对比
- android:屏幕自适应
- Android帧布局实现霓虹灯的效果
- android调用camera实现自定义照相
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用