计时器工具类

import android.annotation.SuppressLint;import android.os.Handler;import android.os.Message;import androidx.annotation.NonNull;import java.util.Timer;import java.util.TimerTask;/** * 用于计时,在主线程中使用此方法 */public class ChjTimer {    private int time;//设置倒计时 X 秒    private int interval = 1000;//设置间隔时间    private ChjTimerInter chjTimerInter; //回调    private Timer timer; // 定时器    private static final int WHAT_REFREH = 0;//刷新    /**     * 创建对象则开始计时     *     * @param chjTimerInter 接口回调     */    public ChjTimer(ChjTimerInter chjTimerInter) {        this.chjTimerInter = chjTimerInter;    }    /**     * 创建对象开始计时     * @param interval      间隔时间通知(使用第一个方法,默认1秒钟刷新一次)     * @param chjTimerInter 接口回调     */    public ChjTimer(int interval, ChjTimerInter chjTimerInter) {        this.chjTimerInter = chjTimerInter;        this.interval = interval;    }    /**     * 开始计时     */    public void start(int time) {        this.time = time;        if (timer == null){            timer = new Timer();        } else {            stop();            return;        }        timer.schedule(new TimerTask() {            @Override            public void run() {                timesss.sendMessage(new Message());            }        }, interval);    }    /**     * 终止计时     */    public void stop() {        if (timer != null) {            timer.cancel();            timer = null;        }        if (timesss != null) timesss.removeMessages(WHAT_REFREH);        if (chjTimerInter != null)chjTimerInter.stop(time);    }    @SuppressLint("HandlerLeak")    private Handler timesss = new Handler() {        @Override        public void handleMessage(@NonNull Message msg) {            super.handleMessage(msg);            if (msg.what != WHAT_REFREH) return;            time -= 1;            if (chjTimerInter != null) chjTimerInter.second(time);            if (time == 0) {                if (timer == null) return;                timer.cancel();                timer = null;                if (chjTimerInter != null) chjTimerInter.expire();            } else if (time > 0) {                timer.schedule(new TimerTask() {                    @Override                    public void run() {                        timesss.sendMessage(new Message());                    }                }, interval);            }        }    };    /**     * 接口     */    public interface ChjTimerInter {        /**         * 间隔时间内回调         */        void second(int time);        /**         * 完成回调         */        void expire();        /**         * 终止计时         */        void stop(int time);    }}

 使用演示

import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TextView;public class MainActivity extends Activity implements View.OnClickListener, ChjTimer.ChjTimerInter {    private TextView tiems,timnew;    private ChjTimer chjTimer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tiems = findViewById(R.id.time);        timnew = findViewById(R.id.timnew);        findViewById(R.id.but).setOnClickListener(this);        findViewById(R.id.buts).setOnClickListener(this);        chjTimer = new ChjTimer(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.but:                tiems.setText("10");                timnew.setText("正在计时");                chjTimer.start(10);                break;            case R.id.buts:                chjTimer.stop();                break;        }    }    @Override    public void second(int time) {        tiems.setText(time + "");    }    @Override    public void expire() {        timnew.setText("计时完成");    }    @Override    public void stop(int time) {        timnew.setText("计时终止" + time);    }}

页面 布局

<?xml version="1.0" encoding="utf-8"?>            

演示效果 

 

更多相关文章

  1. AndroidのCountDownTimer倒计时器
  2. Android实现计时以及倒计时的几种方法
  3. Android实现倒计时启动功能的实现
  4. 开始使用Google Maps Android(安卓)API v2(Getting Started)
  5. Android实现计时以及倒计时的几种方法
  6. Android(安卓)surface 3 绘制 (的时机 java层)
  7. Android计时器
  8. 小区广播接收流程
  9. android之service

随机推荐

  1. Cocos2d-x3.3RC0加载Android的WebView
  2. Android 交错 GridView
  3. android中流的理解。(字节流读写与字符流
  4. 图片缓存库之深度剖析
  5. Android环境变量设置
  6. Android(安卓)中的那些策略模式
  7. Android SDK 源代码关联Eclipse
  8. Android Drawable的那些事儿
  9. Android Activity、Fragment之间的数据传
  10. Android 四大组件之---Activity 详解