android - System.currentTimeMillis()无法按预期工作

Jen*_*ich 6 java android

我使用System.currentTimeMillis()来节省用户启动活动的时间.

public class TimeStamp {
protected long _startTimeMillis = System.currentTimeMillis();

public String getStartTime() {
    return new Time(_startTimeMillis).toString();
}
Run Code Online (Sandbox Code Playgroud)

在活动开始时实例化类,getStartTime()返回正确的时间.我也试着获得活动开始后经过的时间.

public String getElapsedTime() {
    return new Time(System.currentTimeMillis() - _startTimeMillis).toString();
}
Run Code Online (Sandbox Code Playgroud)

这使用模拟的Android设备(android 4.0.3)完美地工作.但是当我在真正的Android设备(android 4.0.3)上部署应用程序时,getElapsedTime()会再开始一小时,然后正常计数.因此,在我的真实设备上,getElapsedTime()将在活动开始后返回"01:00:01",但它应返回"00:00:01".

你知道为什么会这样吗?

tol*_*gap 9

你应该用SystemClock.uptimeMillis().

uptimeMillis()以系统启动后的毫秒数计算,并保证是单调的,而System.currentTimeMillis()则不是因为用户或应用程序可以随时更改它.此外,通常启用自动时间同步,可以随时更改时间.