Не удается прочитать currentTimeMillis в BroadcastReceiver - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь измерить, как долго происходит каждый процесс обнаружения Bluetooth. Я назначаю 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 во втором случае? Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Взято из жизненного цикла Receiver :

Объект BroadcastReceiver действителен только на время вызова onReceive (Context, Intent).

Поэтому время начала, которое вы изначально записали, не будет существовать при расчете времени окончания.

Если вы хотите соответствующим образом отслеживать это время начала, я предлагаю отслеживать его в постоянном хранилище, в этомдело SharedPreferences.

0 голосов
/ 26 июля 2011

Попробуй вот так. Начните отсчет с onClick() отправьте начальное время в данных intent на BroadcastReciever, а когда вы закончите обнаружение, просто вычтите с последним временем, которое вы получите в BroadcastReciever. Это просто еще один способ избежать потери времени старта. Если вы вызываете запуск и остановку обнаружения с одной и той же кнопки, убедитесь, что логика работает, и do not send the initial time twice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...