您的位置:首页 > 移动开发 > Android开发

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 源代码