计时器的使用 我习惯两种方式如下:
第一种使用 handler:
1,初始化 声明
public static final int REGULAR_TIME = 1000; //1秒 时间间隔
private Handler mUiHandler;
private int index=0;
Runnable runnable = new Runnable() {
@Override
public void run() {
//要执行的任务
aaa();
mUiHandler.postDelayed(this , REGULAR_TIME); //循环执行
}
};
2,初始化
mUiHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
Log.d("info","发送消息");
return false;
}
});
3,执行方法
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//可以先执行一次
aaa();
}
});
private void aaa() {
if(index==10){
Log.d("info","停止遍历");
mUiHandler.removeCallbacks(runnable);
}else {
Log.d("info","叠加数据 继续遍历");
index++;
//1小时后开启定时循环执行
mUiHandler.postDelayed(runnable,REGULAR_TIME);
}
}
ok 以上就是hanlder的使用。
第二种是使用 timer和TimerTask相互结合使用如下:
1, 声明
private TimerTask mTimerTask;
private Timer mTimer;
private int currentTime = 0;
2,初始化方法
private void initTimer() {
//30s倒计时
mTimerTask = new TimerTask() {
@Override
public void run() {
currentTime = currentTime + 1;
Log.d("mawl", "视频界面时间记录定时器==" + currentTime);
if (tv_time != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_time.setText(currentTime + "秒");
}
});
}
}
};
mTimer = new Timer();
}
3,执行计时方法
//切换每个的组件时clear 为0
protected void initCurrentTime() {
currentTime = 0;
startTime();
}
/**
* 开始倒计时
*/
protected void startTime() {
//倒计时时间
destroyTimer();
initTimer();
mTimer.schedule(mTimerTask, 0, 1000);
}
4,在ondestory时候执行销毁:
/**
* destory上次使用的
*/
protected void destroyTimer() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (mTimerTask != null) {
mTimerTask.cancel();
mTimerTask = null;
}
}
ok 以上就是我的两个计时方法。