我有一个简单的应用程序,可以打开 ZXing 的条形码扫描仪应用程序。
现在,我想知道完成一次扫描需要多少时间。基本上是从意图启动到获得结果的时间。现在,我知道这很简单,只需在执行意图时放置一个 nanoTime 对象,当我得到结果时放置另一个 nanoTime,将两者相减并相乘以秒/毫秒为单位。
但是,我有循环的意图,因为我想扫描一系列二维码,我认为 for 循环是最好的方法。
所以我有几个全局时间变量long start、end、time;
这是意图的代码:
//Multi Scan Button
public Button.OnClickListener onMultiScan = new Button.OnClickListener() {
public void onClick(View v) {
//start = System.nanoTime();
for(int i = 0 ; i < 5 ; i++){
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
//start = System.nanoTime();
startActivityForResult(intent, multiScan);
}
}
};
这是获取输入的代码。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//ordinary scan
if (requestCode == ordinaryScan) {
if (resultCode == RESULT_OK) {
end = System.nanoTime();
time = (end - start) / 1000000;
System.out.println("Time" + " " + /*i + +*/ time);
String contents = data.getStringExtra("SCAN_RESULT");
Toast.makeText(getApplicationContext(), contents, Toast.LENGTH_SHORT).show();
}
else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
//multiple scan
if (requestCode == multiScan) {
end = System.nanoTime();
time = (end - start) / 1000000;
System.out.println("Time" + " " + /*i + +*/ time);
if (resultCode == RESULT_OK) {
String content = data.getStringExtra("SCAN_RESULT");
//codes = codes + contents + " ";
inputs[counter] = content;
counter += 1;
if(counter == 5){
//output();
verify();
}
}
else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
我注释掉了我启动计时器的部分,因为我不确定将它们放在哪里。发生的情况是,如果我在循环之前调用它,我只会得到一个结果,如果我把它放在循环内,我会得到多个彼此相距不远的结果。
如果仅调用一次,则获取意图完成所需的时间很容易,但如果在循环中多次调用它,则变得很棘手。
那么,有没有办法适当地花费意图打开并获得结果所需的时间?我愿意接受建议,即使这意味着重写我多次调用活动的方式(我目前正在使用循环)。
我还希望能够在扫描代码后立即获得时间,这样我就知道活动调用和活动结果之间的时间。我不想在每次通话完成之前等待每个通话完成。我要实时更新。谢谢。