zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    自制404页面
    Http错误代码含义
    数据访问基础类(基于Access数据库)
    NTILE函数在SQL Server 2000中的实现方法
    矩阵螺旋输出
    分区排名方案和排名值效率分析【图文+测试代码】
    安装eclipse axis2 插件(links 方式)
    perforce关闭服务后无法重启
    A4纸网页打印中对应像素的设定和换算
    2005数据库脚本在SQL2000上执行
  • 原文地址:https://www.cnblogs.com/Nigeria/p/10364257.html
Copyright © 2011-2022 走看看