Android CountDownTimer 倒计时器

Android CountDownTimer是用于倒计时的工具,其onTick方法调用是同步的,确保每次调用间隔完成后再执行。当耗时超过设定间隔时,后续调用会被延迟。start()用于开始倒计时,而cancel()则用于停止。由于实际间隔可能存在误差,不能直接通过millisUntilFinished/1000获取剩余秒数,需要适当调整。提供了一段测试代码以供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CountDownTimer可用于提示作用,其用法较为简单,下面是文档中的一段用法:

new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();
其作用是从30s开始以1s为间隔倒计时,并在每个间隔执行onTick方法(显示剩余时间),当倒计时完onFinish(显示“done”)。

此处注意一点是onTick的调用是同步的,即如果上次onTick没有执行完则本次不会调用,而是等下一次满足条件(下一个间隔onTick中已执行完毕)时再调用onTick方法。


举个例子:如果第一次进入onTick方法并执行一段耗时超过1s(间隔时间),假设耗时1.1s,则第二次进来不执行onTick方法,因为onTick同步,只能等上次的走完。所以两次调用的间隔为2s。


start():开始倒计时,每次调用都重新计时,会马上执行onTick()方法。

cancel():停止倒计时。


另外要提一下,我们虽设置为间隔时间1000,但实际情况可能会有一些误差。有可能执行一次后millisUntilFinished就是29001或者28999,这时就不能单纯地millisUntilFinished/1000获取剩余多少秒,得根据实际情况进行调整。

以下是测试代码:

private TextView mTvTime;
	private Button mBtnStart,mBtnCancel;
	private CountDownTimer mCounDownTimer;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initView();
	}

	private void initView() {
		mTvTime = (TextView) findViewById(R.id.tv_time);
		mBtnStart = (Button) findViewById(R.id.btn_start);
		mBtnStart.setOnClickListener(this);
		mBtnCancel = (Button) findViewById(R.id.btn_cancel);
		mBtnCancel.setOnClickListener(this);
		mCounDownTimer = new CountDownTimer(30000, 1000) {
			
			@Override
			public void onTick(long millisUntilFinished) {
				Log.i("millisUntilFinished", "剩余时间:"+millisUntilFinished);
				mTvTime.setText("剩余时间:"+millisUntilFinished/1000);
			}
			
			@Override
			public void onFinish() {
				mTvTime.setText("计时结束");
			}
		};
	}
	
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_start:
			mCounDownTimer.start();
			break;
		case R.id.btn_cancel:
			mCounDownTimer.cancel();
			break;
			
		default:
			break;
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值