目錄
- 寫在前面的話
- 一、概述
- 二、使用
- 三、測驗
- 補充
寫在前面的話
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 效果展示

補充
1、Timer、TimerTask的簡單應用及如何解決多次調度相同任務
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/260280.html
標籤:其他
上一篇:HPA monitoring cpu utilization fails for deployments which have init containers
