TimerTask与Handler延迟多线程

TimerTask与Handler延迟多线程

Timer与TimerTask可以构建一个延迟器 就好比开启一个线程每隔一段规定的时间访问一次。可以在这个线程中去关闭这个Timer 与TimerTask ,举个例子比如现在我要做一个网游帐号登录超时客户端的检测 用户输入完帐号密码点击登录这时候我开启一个TimerTask每过1秒检查一下用户是否登录成功,过了10秒如果还没有登录成功提示他登陆超时。这个时候我就须要在这个检测线程中去关闭Timer 与TimerTask  因为不需要它在循环检测了。 调用cancel()就可以关闭,请同学们阅读下面这个例子。
 
:
    import java.util.Timer;  
    import java.util.TimerTask;  
    import android.app.Activity;  
    import android.content.Context;  
    import android.os.Bundle;  
    import android.os.Handler;  
    import android.os.Message;  
    import android.view.View;  
    import android.view.View.OnClickListener;  
    import android.widget.Button;  
    import android.widget.TextView;  
    public class TimerTaskActivity extends Activity {  
      
        /**执行Timer进度**/  
        public final static int LOAD_PROGRESS = 0;   
         
        /**关闭Timer进度**/  
        public final static int CLOSE_PROGRESS = 1;   
         
        /** 开始TimerTask按钮 **/  
        Button mButton0 = null;  
         
        /** 关闭TimerTask按钮 **/  
        Button mButton1 = null;  
         
        /** 显示内容 **/  
        TextView mTextView = null;  
      
        Context mContext = null;  
      
        /**Timer对象**/  
        Timer mTimer = null;  
         
        /**TimerTask对象**/  
        TimerTask mTimerTask = null;  
         
        /**记录TimerID**/  
        int mTimerID = 0;  
         
         
        /**接收传递过来的信息**/  
        Handler handler = new Handler() {  
        @Override  
        public void handleMessage(Message msg) {  
            switch (msg.what) {  
            case LOAD_PROGRESS:  
            mTextView.setText("当前TimerID为" + msg.arg1 );  
            break;  
            case CLOSE_PROGRESS:  
            mTextView.setText("当前Timer已经关闭请重新开启" );  
            break;  
              
            }  
            super.handleMessage(msg);  
        }  
        };  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
        setContentView(R.layout.timer);  
        mContext = this;  
      
        /** 拿到button 与 TextView 对象 **/  
        mButton0 = (Button) findViewById(R.id.button0);  
        mButton1 = (Button) findViewById(R.id.button1);  
        mTextView = (TextView) findViewById(R.id.textView0);  
        mTextView.setText("点击按钮开始更新时间");  
         
        //开始  
        mButton0.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View arg0) {  
            //开始执行timer  
            StartTimer();  
            }  
        });  
      
        //关闭  
        mButton1.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View arg0) {  
            //停止执行timer  
            CloseTimer();  
            }  
        });  
         
        super.onCreate(savedInstanceState);  
        }  
      
        public void StartTimer() {  
      
        if (mTimer == null) {  
            mTimerTask = new TimerTask() {  
            public void run() {  
                //mTimerTask与mTimer执行的前提下每过1秒进一次这里  
                mTimerID ++;  
                Message msg = new Message();  
                msg.what = LOAD_PROGRESS;  
                msg.arg1 = (int) (mTimerID);  
                handler.sendMessage(msg);  
            }  
            };  
            mTimer = new Timer();  
            
            //第一个参数为执行的mTimerTask  
            //第二个参数为延迟的时间 这里写1000的意思是mTimerTask将延迟1秒执行  
            //第三个参数为多久执行一次 这里写1000表示每1秒执行一次mTimerTask的Run方法  
            mTimer.schedule(mTimerTask, 1000, 1000);  
        }  
      
        }  
      
        public void CloseTimer() {  
      
        //在这里关闭mTimer 与 mTimerTask  
        if (mTimer != null) {  
            mTimer.cancel();  
            mTimer = null;  
        }  
        if (mTimerTask != null) {  
            mTimerTask = null;  
        }  
         
        /**ID重置**/  
        mTimerID = 0;  
         
        //这里发送一条只带what空的消息  
        handler.sendEmptyMessage(CLOSE_PROGRESS);  
        }  
    }  

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值