Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android多線程研究(2)——定時器

Android多線程研究(2)——定時器

編輯:關於Android編程

先來看一段代碼:

	public static void main(String[] args) {
		new Timer().schedule(new TimerTask() {
			
			@Override
			public void run() {
				System.out.println("陽光小強");
			}
		}, 5000);
		
		int i = 0;
		while(true){
			System.out.println(i++);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

\

將上面代碼修改如下:

		new Timer().schedule(new TimerTask() {
			
			@Override
			public void run() {
				System.out.println("陽光小強");
			}
		}, 2000, 3000);
此時定時器Timer就會在2000ms後開始執行run方法,每隔3000ms重復執行。

如果有一種需求,隔1s、2s、1s、2s......分別執行定時器中的代碼(偶數秒和奇數秒分別執行不同的定時器),我們如何實現(s代表秒)

實現方式一:

	public static void main(String[] args) {
		new Timer().schedule(new TimerTask() {
			
			@Override
			public void run() {
				System.out.println("陽光小強2秒");
				new Timer().schedule(new TimerTask() {
					
					@Override
					public void run() {
						System.out.println("陽光小強4秒");
					}
				}, 1000);
			}
		}, 1000, 2000);
		
		int i = 0;
		while(true){
			System.out.println(i++);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
實現方式二:

	static int count  = 0;
	public static void main(String[] args) {
		
		class MyTimerTask extends TimerTask{
			@Override
			public void run() {
				count = (count + 1) % 2;
				System.out.println("陽光小強" + (2 + 2 * count) + "秒");
				new Timer().schedule(new MyTimerTask(), 2000 + 2000 * count);
			}
			
		}
		new Timer().schedule(new MyTimerTask(), 2000);
		
		int i = 0;
		while(true){
			System.out.println(i++);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
還有一種實際情況就是定時發郵件,我們可以用下面的方式

\

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TestTimer {
	// 時間間隔
	private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

	public static void main(String[] args) {
		Calendar calendar = Calendar.getInstance();
		/*** 定制每日2:00執行方法 ***/
		calendar.set(Calendar.HOUR_OF_DAY, 2);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);

		Date date = calendar.getTime(); // 第一次執行定時任務的時間

		// 如果第一次執行定時任務的時間 小於 當前的時間
		// 此時要在 第一次執行定時任務的時間 加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
		if (date.before(new Date())) {
			date = addDay(date, 1);
		}

		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				//TODO 去發郵件,或者其他定時任務
			}
		}, date, PERIOD_DAY);
	}

	// 增加或減少天數
	public static Date addDay(Date date, int num) {
		Calendar startDT = Calendar.getInstance();
		startDT.setTime(date);
		startDT.add(Calendar.DAY_OF_MONTH, num);
		return startDT.getTime();
	}

}








  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved