Android实现计时与倒计时的几种方法

方法一

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


方法二

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); 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,综合了前几种方法的优点,是最简的












  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 中提供了 CountDownTimer 类来实现倒计时功能。 首先,在布局文件中添加一个 TextView 用于显示倒计时时间: ``` <TextView android:id="@+id/countdown_timer" android:layout_width="wrap_content" android:layout_height="wrap_content"/> ``` 然后在 Activity 或 Fragment 中获取 TextView 实例,并创建 CountDownTimer 对象: ``` TextView countdownTimer = findViewById(R.id.countdown_timer); CountDownTimer timer = new CountDownTimer(60000, 1000) { public void onTick(long millisUntilFinished) { // 每秒钟更新一次倒计时时间 countdownTimer.setText("倒计时:" + millisUntilFinished / 1000 + "秒"); } public void onFinish() { // 倒计时结束时的操作 countdownTimer.setText("倒计时结束"); } }; ``` 其中 `CountDownTimer` 构造函数的第一个参数表示倒计时总时间,单位为毫秒;第二个参数表示倒计时间隔,单位同样为毫秒。在 `onTick()` 方法中更新 TextView 显示的倒计时时间,`onFinish()` 方法倒计时结束时调用。 最后,在需要开始倒计时的地方调用 `start()` 方法即可: ``` timer.start(); ``` ### 回答2: Android倒计时控件是一种用于显示倒计时时间的界面元素,它可以提供一个倒计时功能,帮助用户在特定的时间段内进行倒计时操作。 在Android中,可以通过使用CountDownTimer类来实现倒计时功能。CountDownTimer类是Android提供的一个抽象类,它可以帮助我们实现倒计时功能。 使用CountDownTimer类,我们可以传入两个参数:倒计时总时间和倒计时间隔。倒计时总时间表示倒计时的总时长,而倒计时间隔表示每隔多长时间更新一次倒计时状态。通过重写CountDownTimer类的onTick()方法和onFinish()方法,我们可以在倒计时过程中进行相应的操作。 在onTick()方法中,我们可以更新倒计时界面的显示内容,例如更新TextView控件中的文字内容,显示当前的倒计时时间。 在onFinish()方法中,我们可以进行倒计时结束后的操作,例如更新按钮状态,显示倒计时结束的提示信息等。 除了使用CountDownTimer类外,我们还可以使用Handler类和Runnable接口来实现倒计时功能。通过Handler类和Runnable接口,我们可以实现自定义的倒计时功能,并更新UI界面。 总之,Android倒计时控件是一种非常实用的界面元素,可以帮助我们实现倒计时功能,提醒用户在特定时间内进行相关操作。无论是使用CountDownTimer类还是Handler类和Runnable接口,都可以实现倒计时功能,开发者可以根据具体的需求选择合适的实现方式。 ### 回答3: Android倒计时控件是一种在Android应用中用于显示倒计时的控件。它通常被用于倒计时功能,比如在游戏中显示剩余时间,或者在计时器应用中显示倒计时Android系统提供了几种不同的方式来实现倒计时控件。 一种简单的实现方式是使用CountDownTimer类。这个类提供了一个倒计时功能,并且可以轻松地实现倒计时控件。我们可以通过继承CountDownTimer类并覆写其中的方法实现自定义的倒计时控件。在覆写的方法中,我们可以处理倒计时过程中的逻辑,比如更新UI界面。 另一种实现方式是使用Handler和Runnable来实现倒计时功能。我们可以创建一个Handler对象,并使用它来发送延时消息。在延时消息的回调函数中,我们可以更新倒计时控件的UI界面。通过不断地发送延时消息,我们可以实现倒计时的效果。 在实现倒计时控件时,需要注意一些细节。首先是要考虑控件的样式和布局,以便能够适应不同的应用场景。其次是要处理倒计时结束时的逻辑,比如触发某个事件或显示相应的提示信息。另外,还需考虑到倒计时控件在后台运行时的管理,以便能够正确地继续倒计时。 总之,Android倒计时控件是一种在应用程序中实现倒计时功能的重要工具。通过不同的方式实现倒计时控件,我们可以满足不同应用的需求,并提供良好的用户体验。同时,我们还需要注意一些细节,以确保倒计时控件的稳定性和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值