?
This document uses PHP Chinese website manual Release
CountDownTimer
版本:Android 4.0 r1
?
結(jié)構(gòu)
繼承關(guān)系
public abstract class CountDownTimer extends Object
????????
java.lang.Object
android.os.CountDownTimer
?
類概述
定時執(zhí)行在一段時候后停止的倒計時,在倒計時執(zhí)行過程中會在固定間隔時間得到通知(譯者:觸發(fā)onTick方法),下面的例子顯示在一個文本框中顯示一個30s倒計時:
?new CountdownTimer(30000, 1000) {
? ? ?public void onTick(long millisUntilFinished) {
? ? ? ? ?mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
? ? ?}
? ? ?public void onFinish() {
? ? ? ? ?mTextField.setText("done!");
? ? ?}
? }.start();?
onTick的調(diào)用是同步的,保證這次調(diào)用不會在之前調(diào)用完成前發(fā)生。這里的同步機制主要是用來:onTick的實現(xiàn)需要很多時間執(zhí)行比倒計時間隔更重要的事情。
?
構(gòu)造函數(shù)
???????? public CountDownTimer (long millisInFuture, long countDownInterval)
參數(shù)
?????????????????? millisInFuture? 從開始調(diào)用start()到倒計時完成并onFinish()方法被調(diào)用的毫秒數(shù)。(譯者注:倒計時時間,單位毫秒)
?????????????????? countDownInterval ? 接收onTick(long)回調(diào)的間隔時間。(譯者注:單位毫秒)
?
公共方法
public final void cancel ()
???????? 取消倒計時(譯者:取消后,再次啟動會重新開始倒計時)????????
??????????????????
public abstract void onFinish ()
???????? 倒計時完成時被調(diào)用????
?
public abstract void onTick (long millisUntilFinished)
???????? 固定間隔被調(diào)用
參數(shù)
??????????????????????????? millisUntilFinished?? 倒計時剩余時間。
?
public synchronized final CountDownTimer start ()
???????? 啟動倒計時
?
補充
文章精選
Android 定時器
android倒計時功能的實現(xiàn)(CountDownTimer)
示例代碼
???????? Java:
package com.test.countdowntimer; ? import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; ? import com.test.R; ? public class CountDownTimeActivity extends Activity implements OnClickListener { ? ??? TextView mTextView; ??? Button mButton1; ??? Button mButton2; ??? ??? @Override ??? protected void onCreate(Bundle savedInstanceState) { ?????? super.onCreate(savedInstanceState); ?????? ?????? setContentView(R.layout.countdown); ?????? ??? ??? mTextView = (TextView)findViewById(R.id.textView1); ?????? mButton1 = (Button)findViewById(R.id.button1); ?????? mButton2 = (Button)findViewById(R.id.button2); ?????? mButton1.setOnClickListener(this); ?????? mButton2.setOnClickListener(this); ??? } ? ??? CountDownTimer timer = new CountDownTimer(40000,1000) { ?????? ?????? @Override ?????? public void onTick(long millisUntilFinished) { ?????????? mTextView.setText("seconds remaining: " + millisUntilFinished / 1000); ?????????? try { ????????????? Thread.sleep(1200); ?????????? } catch (InterruptedException e) { ????????????? e.printStackTrace(); ?????????? } ?????????? Log.e("CountDown",millisUntilFinished+""); ?????? } ?????? ?????? @Override ?????? public void onFinish() { ?????????? mTextView.setText("done!"); ?????? } ??? }; ??? ??? @Override ??? public void onClick(View v) { ?????? switch(v.getId()){ ?????? case R.id.button1: ?????????? timer.start(); ?????????? break; ?????? case R.id.button2: ?????????? timer.cancel(); ?????????? break; ?????? } ?????? ??? } } ? |
?
???????? XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout ? xmlns:android="http://schemas.android.com/apk/res/android" ? android:orientation="vertical" ? android:layout_width="match_parent" ? android:layout_height="match_parent"> ??? <TextView android:text="TextView" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> ??? <Button android:text="開始" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> ??? <Button android:text="取消" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> ??? </LinearLayout> ? |
說明:
CountDownTimer的間隔為1s,我們在onTIck方法里面休眠了1.2s,所以log出來發(fā)現(xiàn)打印間隔變成了2s,即中間一次onTick方法沒有被執(zhí)行(不會在之前一次調(diào)用完成前被調(diào)用)。
?