我是靠谱客的博主 勤奋大神,最近开发中收集的这篇文章主要介绍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);
}
}

 

 

最后

以上就是勤奋大神为你收集整理的TimerTask与Handler延迟多线程的全部内容,希望文章能够帮你解决TimerTask与Handler延迟多线程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(89)

评论列表共有 0 条评论

立即
投稿
返回
顶部