您的位置:首页 > 其它

使用Handler和Timertask实现定时器

2015-08-09 01:38 381 查看
用Handler和Timertask实现一个简单的定时器

Handler的使用:

1,定义Handler重载handleMessage方法,handleMessage为处理消息的方法,如下:

private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			show.setText("" + msg.arg1);
		}
	};


2,发送消息

Message message = handler.obtainMessage();
message.arg1 = i;//如果是自定义对象可用message.obj
handler.sendMessage(message);


TimerTask和Timer的使用:

1,TimerTask是定时任务,重载其中的run方法,定时任务便在此方法中执行,

task = new TimerTask() {
		@Override
		public void run() {
		//要执行的定时任务写在此处
		}
	};


2,通过Timer启动任务,可以这样用:

timer.schedule(task, 1000);//延迟1000毫米执行定时任务

schedule方法启动任务并设置执行和延迟时间,有多个重载方法,其中的task参数为TimerTask实例

中途取消任务可用TimerTask类的cancel()方法。

Handler和Timer依次相互调用即可实现计时功能

代码如下:

public class MainActivity extends Activity {
	private EditText et1;
	private TextView show;
	private Button start, stop;
	private int i = 0;
	private Timer timer;
	private TimerTask task;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		et1 = (EditText) findViewById(R.id.editText1);
		show = (TextView) findViewById(R.id.textView1);
		start = (Button) findViewById(R.id.button1);
		stop = (Button) findViewById(R.id.button2);
		start.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				startTime();// 开始计时
			}
		});
		stop.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				stopTime();// 停止计时
			}
		});
		show.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				String str = et1.getText().toString();
				if (str != null && !"".equals(str)) {
					i = Integer.parseInt(str);// 设置计时的开始时间
					show.setText("" + i);
				}

			}
		});
	}

	private void startTime() {
		timer = new Timer();
		task = new TimerTask() {
			@Override
			public void run() {
				i--;
				Message message = handler.obtainMessage();
				message.arg1 = i;// 如果是自定义对象可用message.obj
				handler.sendMessage(message);
			}
		};
		timer.schedule(task, 1000);// 延迟1000毫米执行定时任务
	}

	private void stopTime() {
		task.cancel();// 取消定时任务
	}

	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			show.setText("" + msg.arg1);
			if (i > 0) {// 如果时间大于0循环调用
				startTime();
			}
		}
	};
}


demo下载地址http://download.csdn.net/detail/duduhali/8979485
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: