计算经过时间(第二次标记 - 第一次标记)

时间:2013-03-10 13:02:23

标签: android

我有服务(服务有一个广播接收器,监听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.或者建议更好的方法来计算时间。

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();

否则保留其余代码