Android 有三種不同的時鐘可用,分別陳述如下:
- System.currentTimeMillis() 如同掛在牆壁上的時鐘(時間/日期)以milliseconds表示之,可被使用者或經由網路隨意往前或往後調整的時鐘(函數setCurrentTimeMillis(long))。此時鐘應該只用來與真實時間相關是務上,例如行事曆或鬧鐘等應用程式。計算時距或經過時間,應該使用底下的時鐘。當使用System.currentTimeMillis() 時,可以接收 ACTION_TIME_TICK,ACTION_TIME_CHANGED 和ACTION_TIMEZONE_CHANGED等Intent的廣播來得知時間的改變。
SystemClock.uptimeMillis()
計算從系統啟動booted到現在所經過的milliseconds時間,但當系統進入深睡時(CPU停止,螢幕關閉,裝置等待外部輸入) 此時鐘會停止,除此之外不受其他影響。此時鐘是大部份計算時間間隔的基礎,例如Thread.sleep(millls),
Object.wait(millis)和
System.nanoTime()。
計算
它保證是遞增的,建議用來一般使用者介面事件、效能或其他任何無須考慮裝置睡覺時間的時間間隔。
uptimeMillis()
clock 傳回 timestamp 值。
標準的 Thread.sleep(millis)
和Object.wait(millis)
使用
uptimeMillis()時鐘。如果裝置進入睡眠,則剩餘時間會被延遲直到裝置醒來。這些函數也可能會被
Thread.interrupt()中斷,所以你必須處理
InterruptedException例外。
SystemClock.sleep(millis)
和Thread.sleep(millis)類似,但其它忽略
InterruptedException
例外。當你沒有使用
Thread.interrupt()時,可用此函數,它會保持被中斷時的執行序狀態。
AlarmManager
可用來驅動單次或多次持續事件,無論裝置是在睡眠中或是你的程式並沒有在執行中。事件的排程時間可以選擇用currentTimeMillis()
(RTC) 或elapsedRealtime()
(ELAPSED_REALTIME),然後當發生時會廣播一個Intent。
沒有留言:
張貼留言