安卓基础学习 Day28 |定时器(Timer + TimerTask)

目录

  • 写在前面的话
  • 一、概述
  • 二、使用
  • 三、测试
  • 补充

写在前面的话

1、参考自网络。
2、内容如果有不对的,希望可以指出或补充。
3、新知识。

一、概述

Timer( 定时器):是一种定时器工具,用来在一个后台单线程(较安全)计划执行指定任务。它可以【固定时间或延迟时间】计划执行一个任务(耗时短的任务,比如倒计时发送验证码)一次或反复多次。无法保证时间精确度。

TimerTask( 定时器任务):一个抽象类,其中含有一个抽象方法run(),它的子类代表一个可以被Timer(定时器)计划的任务。

注:每一个Timer(定时器)仅对应唯一 一个线程(单线程),多个TimerTask可以共用一个Timer。

二、使用

//1、实例化Timer对象
Timer timer = new Timer();
//2、实例化TimerTask对象 
TimerTask timerTask = new TimerTask(){
     
    @Override
    public void run(){
     
    //需要执行的具体操作
    }
};
//3、启动定时器
//表示延迟多少(单位毫秒,long类型-多长时间或Date类型-哪个时间)后开始,以多少周期(单位毫秒,long类型)来重复执行
timer.schedule(TimerTask, delay, period);
//4、关闭定时器
//所有使用该同一个定时器的TimerTask在定时器关闭后也会被关闭
timer.cancel();

【注意点】

  • Timer和TimerTask的对象只能用一次,所以如果想多次调同一任务,必须重新实例化。
  • 只能在UI主线程中更新控件/组件(可通过Handler-各处线程间的消息传递)。
  • Timer(定时器)用完后,需要cancel,否则定时器的线程会一直存在。

三、测试

1 布局略

2 代码部分

MainActivity.java

package com.example.testworked;

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
     
    private Timer timer;
    private Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
     
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取控件
        TextView testTv = findViewById(R.id.test_tv);
        Button testBtn = findViewById(R.id.test_btn);

        //定义Handler
        handler = new Handler() {
     
            int i;
            public void handleMessage(Message msg) {
     
                i = msg.what;
                testTv.setText("倒计时:" + i);
                if (i == 0) {
     
                    timer.cancel();//退出Timer
                    if(timer != null){
     
                        testTv.setText("");
                        //普通弹窗
                        AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
                                .setTitle("测试完毕")
                                .setIcon(R.mipmap.ic_launcher)
                                .create();//确定创建

                        dialog.show();//显示弹窗
                    }
                }
            }
        };

        //点击事件
        testBtn.setOnClickListener(new View.OnClickListener() {
     
            @Override
            public void onClick(View v) {
     
                //1、实例化Timer对象
                timer = new Timer();
                //2、实例化TimerTask对象
                TimerTask timerTask = new TimerTask() {
     
                    int i=5;
                    @Override
                    public void run() {
     
                        Log.i("调用run()方法的线程--》当前线程", Thread.currentThread().getName());

                        //定义一个消息传递出去
                        Message msg = new Message();
                        msg.what = i--;
                        handler.sendMessage(msg);
                    }
                };
                //3、启动
                timer.schedule(timerTask, 1000, 1000);//延时1s后执行,1s执行一次
            }
        });
    }

}

3 效果展示
安卓基础学习 Day28 |定时器(Timer + TimerTask)_第1张图片

补充

1、Timer、TimerTask的简单应用及如何解决多次调度相同任务

你可能感兴趣的:(学习日志)