我有服务(服务有一个广播接收器,监听ACTION_BATTERY_CHANGED
),我想计算两个时间标记之间的时间,这就是我所拥有的:
public void onReceive(Context context, Intent intent){
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
long time;
long startTime=0;
if(OldLevel==0){
OldLevel=level;
startTime = System.nanoTime();
}
else{
time=System.nanoTime()-startTime;
startTime=System.nanoTime(); //edited
Log.e("inFFFF","FFFF "+time);// I somehow here get 16243428223995 nanoseconds which are too large because in reality it just take 1-2min.
}
}
如果你能够请:1。告诉我为什么时间比预期的大2.或者建议更好的方法来计算时间。
答案 0 :(得分:3)
在代码示例中,只有在满足条件1的情况下,才为startTime指定值。
(否则你计算System.nanoTime()-startTime
,其中startTime为0)
所以实际上你现在将时间比较为0,这是开始时间的初始值。 这是错的。纳米时间用于测量经过的时间。 您应该始终将System.nanoTime()与System.nanoTime()的其他调用进行比较。 看到: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()
也许尝试这样的事情:
public void onReceive(Context context, Intent intent){
long time;
long startTime= System.nanoTime();
if(....){
startTime = System.nanoTime();
}
else{
time=System.nanoTime()-startTime;
Log.e("inFFFF","FFFF "+time);// I somehow here get 16243428223995 nanoseconds which are too large because in reality it just take 1-2min.
}
}
答案 1 :(得分:1)
在else
开始时间始终为零。所以你需要在开始时自己捕捉开始时间。
即
long startTime=System.nanoTime();
否则保留其余代码