我正在设计秒表,对于我的应用程序,我需要不断获得这个时刻和秒表开始的时刻之间的时差。
这就是我所拥有的
private int timestamp;
private Date startTime;
public void start() {
if (!working) {
startTime = new Date();
working = true;
tick = new Thread() {
public void run() {
while (true) {
try {
timestamp = (new Date().getDate() - startTime.getDate())/1000;
msg = handler.obtainMessage(0, getTimeStamp());
handler.sendMessage(msg);
} catch (InterruptedException ex) {
ex.printStackTrace();
working = false;
timestamp = 0;
break;
}
}
}
};
tick.start();
}
}
但是我收到了一条不推荐使用getDate()方法的消息。怎么重构呢?我已经搜索了一个解决方案,并找到了一些类似的帖子,并尝试了解决方案,但我的IDE只是不识别DateUtil,DateTime或toCalendar Methods,我想我错过了正确的库? 还有一个问题,你能不能给我一些关于这些方法被弃用的具体含义的信息?这对我来说不是很清楚。 提前谢谢。
答案 0 :(得分:2)
重构此代码的一种方法是使用SystemClock.uptimeMillis(),如果您的时钟没有足够的时间让设备进入休眠状态。或者,当它确实超过睡眠时间时,您可以使用SystemClock.elapsedRealtime()。两个时钟都是单调的,谷歌建议将它们用于间隔时间。
你可以这样试试:
startTime = SystemClock.elapsedRealtime(); //Should be a long, not an int
working = true;
tick = new Thread() {
public void run() {
while (true) {
try {
timestamp = (SystemClock.elapsedRealtime() - startTime)/1000;
msg = handler.obtainMessage(0, getTimeStamp());
handler.sendMessage(msg);
} catch (InterruptedException ex) {
ex.printStackTrace();
working = false;
timestamp = 0L
break;
}
}
}
};
但请记住,作为在java和Android中使用时间的任何东西,如果手机用户改变他的时钟,所有这些值都会发生变化,所以如果你想要一个更强大的解决方案,我建议这篇文章:http://julien-millau.fr/articles/Secure-Android-time-based-application.html 。
答案 1 :(得分:1)
对于你正在做的事情,getDate会正常工作。但更多的Android方法是使用System.currentTimeMillis()而不是生成Date对象以及那里的所有效率低下。
不推荐使用基本上意味着它不再是图书馆作者所建议的做事方式。这并不意味着它不会起作用,或者你永远不应该使用它 - 这意味着你应该理解作者感觉有更好的方法,你应该有理由使用不赞成的方式
答案 2 :(得分:0)
有一天,也可以从API中完全删除已弃用的方法,因此最好使用较新的技术来解决兼容性问题。