Android显示设备之间的剩余时间不同
我正在开发一个Android应用程序,它会在一段时间后自动终止。我在actionbar中添加了一个按钮,它应该向用户显示剩余时间。代码如下:Android显示设备之间的剩余时间不同,android,time,simpledateformat,Android,Time,Simpledateformat,我正在开发一个Android应用程序,它会在一段时间后自动终止。我在actionbar中添加了一个按钮,它应该向用户显示剩余时间。代码如下: String srt = getResources().getString(R.string.remainingTime) + " "; DateFormat fmt = new SimpleDateFormat("HH:mm:ss"); long gt = timeKeeper.getTimeUntilTermination() - timeKeepe
String srt = getResources().getString(R.string.remainingTime) + " ";
DateFormat fmt = new SimpleDateFormat("HH:mm:ss");
long gt = timeKeeper.getTimeUntilTermination() - timeKeeper.getElapsedTime(); // gotten from elsewhere
long ct = System.currentTimeMillis() - countdownStartedAt;
Date rt = new Date(gt - ct); // remaining time
showToast(srt + fmt.format(rt));
在AVD上测试时,toast包含适当的剩余时间,如00:44:32,但在手机上,toast说01:44:32是因为一些奇怪的原因,只是为了让人更困惑,应用程序仍然在00:44:32后终止-额外的时间只显示在toast中。同一段代码如何可能根据它是模拟器还是手机生成不同的结果
包含时间变量的类已简化:
public class TimeKeeper
{
private long timeUntilTermination;
private long elapsedTime;
public long getTimeUntilTermination() {return timeUntilTermination;}
public long getElapsedTime() {return elapsedTime;}
}
该活动有一个静态计时器对象和一个方法:
public void startTimeCountDown()
{
timeHandler = new Handler();
timeHandler.postDelayed(new Runnable() {
// terminating
}, timeKeeper.getTimeUntilTermination() - timeKeeper.getElapsedTime());
countdownStartedAt = System.currentTimeMillis();
}
他们都像他们应该的那样工作。只是通知有误
此方法中设置了timeUntiltermination变量:
private void setTimeUnilTermination()
{
long tut = (timePicker.getCurrentHour() * 3600000) +
(timePicker.getCurrentMinute() * 60000);
timeKeeper.setTimeUntilTermination(tut);
}
以及自动保存中使用的方法,因此如果用户退出并重新启动应用程序,计时器将从停止的位置重新启动。经过的时间将保存到文件中,然后重新读取。没有修改
private void keepElapsedTimeJustInCase() {
timeKeeper.setElapsedTime(System.currentTimeMillis() - countdownStartedAt);
}
你需要利用现在的时间。
这在其他手机中可能会有所不同,因为需要进行配置。如果您添加方法执行的操作GetTimeUntFiltermination、getElapsedTime和countdownStartedAt变量,这会有所帮助。请记住System.currentTimeMillis不应用于经过时间的测量使用nanoTime代替有趣的是,在我的代码中,其他与时间相关的操作都可以正常工作。只有这段代码显示错误的时间,原因我不明白。Android的一切都是随机的。TimeUntilternation和elapsedTime的值是您设置的值吗?或者这些是从哪里来的?我可以从系统中看到倒计时开始。currentTimeMillis,但其他人不知道值是什么。现在一切都应该清楚了。