我正在尝试衡量每个蓝牙发现过程发生的时间。我将currentTimeMillis
分配给startTime和stopTime。当我将BroadcastReceiver
类作为内部类时,我可以读取这两个变量,但是当我将它作为外部类时,我无法读取startTime。这是我的代码,
private long startTime;
private long stopTime;
@Override
public void onReceive(Context context, Intent intent) {
String strIntent = intent.getAction();
if (strIntent.equalsIgnoreCase(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) {
handleDiscStarted();
} else if (strIntent.equalsIgnoreCase(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
handleDiscFinished();
}
}
private void handleDiscStarted() {
startTime = System.currentTimeMillis();
Log.d(tag, "\nDiscovery started " + startTime);
}
private void handleDiscFinished() {
stopTime = System.currentTimeMillis();
Log.d(tag, "\nDiscovery finished " + stopTime + ", takes " + (stopTime-startTime) + " ms");
// startTime = 0 here...
Log.d(tag, "\nstopTime=" + stopTime + ", startTime=" + startTime);
}
知道不同行为发生的原因吗?如何在第二种情况下读取startTime?谢谢!
答案 0 :(得分:2)
BroadcastReceiver对象仅在通话期间有效 to onReceive(Context,Intent)。
因此,在计算结束时间时,您最初录制的开始时间将不存在。
如果你想适当地跟踪这个开始时间,我建议在持久存储中跟踪它,在这种情况下是SharedPreferences
。
答案 1 :(得分:0)
试试这样。从onClick()
开始计算,将intent
数据中的初始时间发送到BroadcastReciever
,当您完成发现时,只需减去最后一次进入BroadcastReciever
的时间}。这只是避免失去开始时间的另一种方式。如果您从同一个按钮调用启动和停止发现,请确保逻辑正常,并do not send the initial time twice
。