最近在看Handler源碼的時候發現了Android系統中對於獲取時間的不同方法。
首先是我們比較常用的System.currentTimeMillis,它計算的是從1970年1月1日開始的時間,以毫秒爲單位。
使用這個方法的存在一定的風險,因爲它是以系統時間爲基準的,而我們可以通過SystemClock.setCurrentTimeMilis來設置系統時間。
比如說我們設置了一個定時任務在11:30分處理某一個事件A。而用戶攜帶手機可能乘坐飛機跨過不同的時區,導致了事件A不能在預定的時間點開始處理。
又比如我們設置好了一個定時任務在11:30分處理,但手機中的其他軟件改變了系統時間。也會導致我們設置的定時任務無法執行。
所以爲了解決這些問題,Android系統提供了很多不同的方案,比如監聽時間變化廣播、AlarmManager、以及其它獲取不同時間的方法。
今天要說的就是最後一種:SystemClock類
它提供了幾種不同的獲取時間的方法:
1)SystemClock.uptimeMillis 它獲取的是系統從開機到現在的時間,單位是毫秒。但是它不包括系統休眠的時間(cpu休眠、屏幕休眠等)
2)SystemClock.elapsedRealtime 它獲取的是從開機到現在的時間,單位是毫秒。它包括了系統休眠的時間。
3)SystemClock.elapsedRealtimeNanos 它獲取的是開機到現在的時間,單位是納秒。它包括了系統休眠的時間。
4)SystemClock.currentThreadTimeMilis 它獲取的是在當前線程中運行的時間,單位是毫秒。