返回介绍

CountDownTimer

发布于 2025-03-09 17:00:21 字数 5204 浏览 0 评论 0 收藏 0

CountDownTimer

版本:Android 4.0 r1

结构

继承关系

public abstract class CountDownTimer extends Object

java.lang.Object

android.os.CountDownTimer

类概述

定时执行在一段时候后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知(译者:触发 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 的调用是同步的,保证这次调用不会在之前调用完成前发生。这里的同步机制主要是用来:onTick 的实现需要很多时间执行比倒计时间隔更重要的事情。

构造函数

public CountDownTimer (long millisInFuture, long countDownInterval)

参数

millisInFuture 从开始调用 start() 到倒计时完成并 onFinish() 方法被调用的毫秒数。(译者注:倒计时时间,单位毫秒)

countDownInterval 接收 onTick(long) 回调的间隔时间。(译者注:单位毫秒)

公共方法

public final void cancel ()

取消倒计时(译者:取消后,再次启动会重新开始倒计时)

public abstract void onFinish ()

倒计时完成时被调用

public abstract void onTick (long millisUntilFinished)

固定间隔被调用

参数

millisUntilFinished 倒计时剩余时间。

public synchronized final CountDownTimer start ()

启动倒计时

补充

文章精选

Android 定时器

android 倒计时功能的实现(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 出来发现打印间隔变成了 2s,即中间一次 onTick 方法没有被执行(不会在之前一次调用完成前被调用)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文