2013-12-10 39 views
2

我需要測量Android上的較長運行時間,並且可能會在兩者之間重新啓動設備。在Android上測量很長的運行時間(重新啓動)

從我所瞭解的情況來看,System.nanoTime()在每次設備重啓時都會重置,並且System.currentTimeMillis()由於用戶可以更改而不可靠。

,我想出了是聽ACTION_SHUTDOWNBOOT_COMPLETED,使用System.currentTimeMillisec()來計算經過時間(用戶無法更改時鐘時間,而設備處於關閉狀態,希望:)),並把它添加到唯一的解決辦法最後System.nanoTime()我在關閉之前。

我老實說不喜歡這個解決方案,因爲它非常昂貴(我需要聽2個廣播事件)並且不準確,但我找不出任何其他方式來做到這一點。

任何想法?另外一個本地解決方案對我來說也很好。

+0

我不認爲有更好的方法。至少你必須收聽兩個系統廣播,BOOT_COMPLETED和ACTION_SHUTDOWN。您可以優化這兩者的剩餘內容。但我相信這是你必須做的最低要求。 –

+0

http://stackoverflow.com/questions/3523442/difference-between-clock-realtime-and-clock-monotonic應該是這兩者背後的時間。 Android設備會根據外部時間源(可能是NTP,GSM,GPS,?)自動調整'System.currentTimeMillisec()' - 無需用戶干預,可能在啓動時(即在BOOT_COMPLETED之前)。您也可以使用外部時間服務,但需要網絡訪問權限。 – zapl

+0

願意重寫平臺時鐘以擊敗你的用戶很可能是一個只需攔截/修補正在使用的任何系統調用來讀取它們的用戶。 –

回答

0

您可以通過使用互聯網時間服務器來獲取您檢查時的時間,以避免用戶更改時間。有幾種方法可以做到這一點。

如果您只是堅持這個值,那麼用戶無法做任何事情來搞亂您的計算。

+0

你的想法肯定是正確的,但我正在尋找一些不會增加開銷的東西,所以使用NTP對我來說不是一個合適的解決方案。 – dmarcato

+0

據我所知,沒有解決方案的電話保證是正確的時間,除非你能以某種方式從運營商獲得時間戳。據我所知,這沒有暴露。你可能知道收音機基本上是一個獨立的操作系統。 –

相關問題