Android中的System.currentTimeMillis和SystemClock類

最近在看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 它獲取的是在當前線程中運行的時間,單位是毫秒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章