Android中handler倒计时


import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import java.util.Timer;
import java.util.TimerTask;

public class **Activity extends BaseActivity{
private int time;
private Timer mTimer;

// 使用handler实现子线程发送消息到主线程
@SuppressLint("HandlerLeak")
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
time = (int)msg.obj;
if (time<5){
timerTask();
}else {
Intent intent = new Intent(FlashScreenActivity.this,MainActivity.class);
startActivity(intent);
mTimer.cancel();// 停止倒计时
finish();// 用于闪屏页时关闭此activity,在用户按返回按钮时,不会再回到此页面
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
  timerTask();// 调用计时器方法
}
private void timerTask() {
mTimer = new Timer();
TimerTask mTask = new TimerTask() {
@Override
public void run() {
time++;
Message message = new Message();
message.obj = time;
handler.sendMessage(message);
}
};
// 第一个参数"new MyTask(event.getServletContext())": 是 TimerTask 类,在包:import java.util.TimerTask .
// 使用者要继承该类,并实现 public void run() 方法,因为 TimerTask 类实现了 Runnable 接口。
// 第二个参数"0"的意思是:(0就表示无延迟)
// 制定timer定时器第一次调用run方法的时间,0表示不指时间,立刻调用。一般这个参数指定的时间格式是:yyyy-MM-dd HH:mm:ss
mTimer.schedule(mTask,1000);
}
/**
* 防止内存泄漏(如果不停止,倒计时会在程序内一直执行,知道进程消失)
* 销毁时释放资源
*/
@Override
protected void onDestroy() {
super.onDestroy();
mTimer.cancel();
finish();
}
}






还有一种Android自带的倒计时 这是项目中倒计时120秒获取验证码的代码 我使用的是两个控件切换显示隐藏,有些人开发思路就是点击同一个控件去倒计时,这样会有重复点击的问题,虽然很好解决,但是我最终是没有解决,而是使用两个控件去显示隐藏的,可以避免重复发送验证码
private CountDownTimer timer = new CountDownTimer(120000, 1000) {

@Override
public void onTick(long millisUntilFinished) {

loginTvMessageDaojishi.setText((millisUntilFinished / 1000) + "s后重新发送");
if (millisUntilFinished / 1000 < 0) {
oncancel(loginTvMessage);
}
}

@Override
public void onFinish() {
loginTvMessage.setEnabled(true);// 设置可点击
loginTvMessage.setText("重新发送验证码");
loginTvMessage.setVisibility(View.VISIBLE);
loginTvMessageDaojishi.setVisibility(View.GONE);
}
};

/**
* 取消倒计时
*
* @param v
*/
public void oncancel(View v) {
timer.cancel();
}

/**
* 开始倒计时
*
* @param v
*/
public void restart(View v) {
timer.start();
}
posted @ 2019-02-12 10:49  芳草玫瑰下  阅读(629)  评论(0编辑  收藏  举报