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);  
        }  
    }  

 

 

你可能感兴趣的:(算法,android,小技巧记录)