我正在开发一款Android应用,它会在一段时间后终止。我在操作栏上添加了一个按钮,它应该向用户显示剩余时间。这是代码:
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上测试时,吐司包含适当的剩余时间(如“00:44:32”),但是在手机上吐司说“01:44:32”出于某些奇怪的原因(而且只是为了更多)混乱,应用程序仍然在00:44:32之后终止 - 额外的小时仅在吐司中显示。根据它是模拟器还是手机,同一段代码如何产生不同的结果?
包含时间变量的类(简化):
public class TimeKeeper
{
private long timeUntilTermination;
private long elapsedTime;
public long getTimeUntilTermination() {return timeUntilTermination;}
public long getElapsedTime() {return elapsedTime;}
}
Activity有一个静态的TimeKeeper对象和一个方法:
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);
}
答案 0 :(得分:0)
您需要使用nowTime。 其他手机可能会有所不同,因为需要进行配置。