TimerTask与Handler延迟多线程操作Android源代码
2014-02-24 15:17
295 查看
android源代码——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);
}
}
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延迟多线程Android源代码
- Android中TimerTask与Handler延迟多线程源代码
- 在J2ME中使用Timer和TimerTask来实现多线程
- TimerTask与Handler延迟多线程
- android Timer与TimerTask的相关操作
- handler实现自定义对话框(Dialog)的数据定时(TimerTask)更新
- timer+TimerTask+handler倒计时-----小例子深奥多
- android Timer与TimerTask的相关操作
- Android按钮屏蔽计时器(handler+TimerTask)
- 进阶_计时器(Handler+TimerTask实现)_150503
- Timer搭配TimerTask与Handler使用(更新UI)
- Android 多线程操作之 Handler 与 HandlerThread
- Java中的Timer和TimerTask来实现多线程
- Timer(TimerTask )\AlarmManger\Handler\Thread.sleep\ScheduledThreadPoolExecutor
- iOS 开发 多线程详解之GCD应用延迟操作,单例设计模式,调度组
- Timer+timertask+handler
- 多线程之延迟操作
- timer timetask handler
- 在J2ME中使用Timer和TimerTask来实现多线程
- Handler+Timer/TimerTask实现ViewPager的自动循环播放