2012-08-07 85 views
0
SystemClock.uptimeMillis() 

這個調用從Android SystemClock它現在我用這個基地起飛動畫「馬克塞斯」時間將重置爲零 - 我該如何補償?

之前將復位至零,運動等下面是其中一個復位將基本上凍結的例子我應用。

if (currentTime > frameTime + sequenceTime) 
{ 
    frameTime = currentTime; 
} 

這裏躺着的問題currentTime是說50則frameTime設定爲50吧?理想情況下currentTime會隨着SystemClock.uptimeMillis()增加,但如果重置?當前時間與frameTime相比非常小,我將如何解決這個問題或爲所有對象重置currentTime

這只是一個小例子,如果我有不同的對象有類似的困境。

回答

0

從我的文檔閱讀中,「正常運行時間」時鐘只有在設備重啓時纔會重置。除非你的應用程序......不知何故...設法繼續運行重新啓動,你不應該擔心時鐘重置。

(在另一方面,如果你的應用程序需要做的是在重新啓動之後繼續下去的動畫,那麼也許你應該使用「的currentTimeMillis」時鐘。爲SystemClock的Android文檔描述了替代品。)


該文檔說明了這一點「注意:此值可能偶爾會被重置(否則將會被解除)。」

這對我沒有多大意義。時鐘是一個毫秒的時鐘,並作爲一個長期返回,所以你不會期望它有環繞。 (2^64毫秒是非常非常長的時間。)我能想到的唯一解釋是有些設備使用32位硬件定時器來實現這個時鐘......這是一種蹩腳的行爲。

+0

你能提供一個鏈接到你閱讀的地方嗎? javadoc視圖說: 返回自啓動以來的毫秒數,不包括在深度睡眠中花費的時間。注意:此值可能偶爾會被重置(否則它會迴繞)。 – 2012-08-07 01:43:42

+0

哦,如果不重置,我應該如何儲存時間?目前我有一個長期持有的價值,但不會最大限度地出? – 2012-08-07 02:03:50

+0

@dnxviral - 你是否試圖計算需要多長時間才能達到最大值?提示:2^10N大約等於10^3N,因此2^64的十進制數爲18位。 – 2012-08-07 02:44:47