我需要计算两次之间的时间。 System.currentTimeMillis()
每次调用Thread
时都会返回相同的值。
我的代码是:
@Override
protected void onCreate(Bundle savedInstanceState) {
// Other codes..
start_sec = Math.round(System.currentTimeMillis()/1000);
fin = false;
runThread();
// Other codes..
}
private void runThread() {
new Thread() {
public void run() {
while (i++ < 61) {
if (!running) return;
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
if(!fin){
int len = Math.round(System.currentTimeMillis()/1000) - start_sec;
Log.d("current time: ",String.valueOf( Math.round(System.currentTimeMillis()/1000)));
Log.d("difference is: ", String.valueOf(len));
if(len < 0 && len > 58){
fin=true;
}
timerec.getLayoutParams().width = metrics.widthPixels *(60- len)/60;
timerec.requestLayout();
}
else{
end_game();
running= true;
}
}
});
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
这是日志:
...
D/current time:: 1492337024
D/difference is:: 0
D/current time:: 1492337024
D/difference is:: 0
....
它回复同一时间&#34;。解决方案是什么?
答案 0 :(得分:0)
花费时间。并且不要将它除以1000.时差是秒的一小部分。这就是为什么它与你四舍五入的同时显示的原因。
答案 1 :(得分:0)
while循环中两个循环之间的差异远小于一秒,当你用秒计算差值时(你将当前毫秒除以1000)它会产生相同的秒,差值为0秒。
尝试以毫秒为单位打印差异(不分割)。
答案 2 :(得分:0)
试试这个:
@Override
protected void onCreate(Bundle savedInstanceState) {
// Other codes..
start_sec = System.currentTimeMillis();
fin = false;
runThread();
// Other codes..
}
private void runThread() {
new Thread() {
public void run() {
while (i++ < 61) {
if (!running) return;
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
if(!fin){
int len = System.currentTimeMillis() - start_sec;
Log.d("current time: ",String.valueOf( System.currentTimeMillis()));
Log.d("difference is: ", String.valueOf(len));
if(len < 0 && len > 58){
fin=true;
}
timerec.getLayoutParams().width = metrics.widthPixels *(60- len)/60;
timerec.requestLayout();
}
else{
end_game();
running= true;
}
}
});
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
答案 3 :(得分:0)
Math.round()会导致问题。
long len = System.currentTimeMillis()/1000 - start_sec;
Log.d("current time: ",String.valueOf(System.currentTimeMillis()/1000));
Log.d("difference is: ", String.valueOf(len));
此代码适用于altought。