android 定时器

本文介绍了Android中实现定时任务的三种方法,重点讲解了Handler作为定时器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定时器的三种方法。

(1)Handler

//开始定时
	public void startTimer() {
		//移除MSG_TIMING
		mHandler.removeMessages(MSG_TIMING);
		Message msg = Message.obtain();
		msg.what = MSG_TIMING;
		msg.arg1 = TYPE_START;
		//开始计时
		mHandler.sendMessage(msg);
	}

	//停止计时
	public void stopTimer() {
		//移除MSG_TIMING
		mHandler.removeMessages(MSG_TIMING);
	}

	public static final int MSG_TIMING = 1;
	public static final int TYPE_START = 1;
	public static final int TYPE_STOP = 2;

	private Handler mHandler = new Handler() {

		private int count = 0;

		@Override
		public void handleMessage(Message msg) {
			int what = msg.what;
			int type = msg.arg1;
			if (what == MSG_TIMING) {
				if (type == TYPE_START) {
					count = 0;
				}
				// UI
				// UI
				//延迟1000ms
				mHandler.sendEmptyMessageDelayed(MSG_TIMING, 1000);
				count++;
			}
		}

	};

(2)Handler和Thread

//开始定时
	public void startTimer() {
		mThread = new MyThread();
		mThread.start();
	}


	//停止计时
	public void stopTimer() {
		if(mThread != null) {
			mThread.setStop(true);
			mThread = null;
		}
	}


	public static final int MSG_TIMING = 1;
	public static final int TYPE_START = 1;
	public static final int TYPE_STOP = 2;
	
	class MyThread extends Thread {
		
		private boolean mStop = false;
		private int count = 0;
		
		public void setStop(boolean stop) {
			stop = true;
		}
		
		@Override
		public void run() {
			
			while(!mStop) {
				Message msg = Message.obtain();
				msg.arg1 = count;
				msg.what = MSG_TIMING;
				mHandler.sendMessage(msg);
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				count ++;
			}
		}
	}
	
	private MyThread mThread;


	private Handler mHandler = new Handler() {


		private int count = 0;


		@Override
		public void handleMessage(Message msg) {
			int what = msg.what;
			int count = msg.arg1;
			//UI
		}


	};

(3)Timer、TimerTak和Handler

public static final int MSG_TIMER = 0;
	private Handler mHandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			int what = msg.what;
			if (what == MSG_TIMER) {
				mTimerResult = msg.arg1;
				mTimingText.setText(Integer.toString(mTimerResult));
			}
		};
	};

	private Timer mTimer;
	TimerTask mTask;

	private int mTimerResult = 0;
	private boolean mIsTiming = false;
	private boolean mStarted = false;

	public void startTimer() {
		mIsTiming = true;
		restartTimer();
	}

	public void restartTimer() {
		mHandler.removeMessages(MSG_TIMER);
		if (mTimer != null) {
			mTimer.cancel();
			mTimer = null;
		}
		if (mTask != null) {
			mTask.cancel();
			mTask = null;
		}
		mTimer = new Timer();
		mTask = new TimerTask() {

			private int count = 0;

			@Override
			public void run() {
				Message msg = Message.obtain();
				msg.what = MSG_TIMER;
				msg.arg1 = count;
				mHandler.sendMessage(msg);
				count++;
			}
		};
		mTimer.schedule(mTask, 0, 1000);
	}

	public void stopTimer() {
		mIsTiming = false;
		mHandler.removeMessages(MSG_TIMER);
		if (mTimer != null) {
			mTimer.cancel();
			mTimer = null;
		}
		if (mTask != null) {
			mTask.cancel();
			mTask = null;
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值