一、三种常用的定时器
1.Handler类的postDelayed方法:
final Handler mHandler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
//do something
//每隔1s循环执行run方法
mHandler.postDelayed(this, 1000);
}
};
//主线程中调用:
mHandler.postDelayed(r, 100);//延时100毫秒
2.用handler+timer+timeTask方法:
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//do something
}
super.handleMessage(msg);
}
};
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
//主线程中调用:
timer.schedule(timerTask, 1000, 500);//延时1s,每隔500毫秒执行一次run方法
3.Thread+handler方法:
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//do something
}
super.handleMessage(msg);
}
};
class MyThread extends Thread {//这里也可用Runnable接口实现
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);//每隔1s执行一次
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//主线程中调用:
new Thread(new MyThread()).start();
二、三种延时的快捷方法:
1.Handler的postDelayed方法:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//do something
}
}, 1000); //延时1s执行
2.timer + TimerTask方法:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//do something
}
},1000);//延时1s执行
3.Thread方法:
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);//延时1s
//do something
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
自带定时器 CountDownTimer
CountDownTimer是一个倒计时的类,还可以指定时间间隔定期通知,举个栗子,比如说你倒计时是100秒的,可以指定每20秒通知一次,这样开始的时候会回调一次,20秒时会回调一次,40秒时会回调一次…,200秒时的回调和时间间隔的回调不同方法的。
常用方法:
- cancel() 取消倒计时
- onFinish() 时间到了,就会触发回调。
- onTick 定期间隔触发回调
- start() 开始倒计时
CountDownTimer countDownTimer = new CountDownTimer(totalTime, 2000) {
@Override
public void onTick(long millisUntilFinished) {
updateFileData(fileId); //执行任务
}
@Override
public void onFinish() {
if (User.getInstance().isLoginIng()) {
if (countDownTimer != null) {
countDownTimer.start();
}
}
}
};
countDownTimer.start();
转载:https://www.jianshu.com/p/29401d15447d