1、System.currentTimeMillis()獲取的是系統的時間,可以使用SystemClock.setCurrentTimeMillis(long millis)進行設置。如果使用System.currentTimeMillis()來獲取當前時間進行計時,應該考慮監聽ACTION_TIME_TICK, ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED這些廣播ACTION,如果系統時間發生了改變,可以通過監聽廣播來獲取。
2、SystemClock.uptimeMillis()表示系統開機到當前的時間總數,單位是毫秒,但是,當系統進入深度睡眠(CPU休眠、屏幕休眠、設備等待外部輸入)時間就會停止,但是不會受到時鍾縮放、空閑或者其他節能機制的影響。
3、SystemClock.elapsedRealtime()和SystemClock.elapsedRealtimeNanos()表示系統開機到當前的時間總數。它包括了系統深度睡眠的時間。這個時鍾是單調的,它保證一直計時,即使CPU處於省電模式,所以它是推薦使用的時間計時器。
有幾種機制,用來控制事件時間:
1、標准函數Thread.sleep(millis)和Object.wait(millis)是一直被使用的。如果這些函數使用SystemClock.uptimeMillis()時鍾,如果設備進入休眠狀態,那么提醒時間可能會被推遲到設備喚醒。並且這些同步函數可以被Thread.interrupt()打斷。
2、SystemClock.sleep(millis)是一個工具函數類似於Thread.sleep(millis),不同的是它忽略了InterruptedException異常,如果你不使用Thread.interrupt()的話,就可以使用這個函數來延遲。
3、Handler可以在一個絕對或者相對的時間里同步的調度Runnable對象,它可以使用SystemClock.uptimeMillis()時鍾。
4、AlarmManager可以設置一個定時器事件,當時間到來的時候,不管設備是否處於深度睡眠或者正在運行,事件都會發生。
來自:http://developer.android.com/reference/android/os/SystemClock.html