Android CountDownTimer 倒计时器

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



版权声明:本文为qq_15128547原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。