вызывать notify () изнутри onReceive ()? - PullRequest
0 голосов
/ 23 февраля 2012

, поэтому я пытаюсь написать небольшой фрагмент кода Android, в котором я хочу, чтобы один поток A ожидал (), пока не станет доступным сетевое соединение. Поток A должен выполнять некоторые вещи, связанные с Wi-Fi, и, таким образом, BroadcastReceiver зарегистрирован с намерением WifiManager.NETWORK_STATE_CHANGED_ACTION. То, что я делаю сейчас, выглядит примерно так:

Boolean networkReady = new Boolean(false);
...
Thread A {
  synchronized (networkReady) {
    if (!networkReady) {
      wait();
    }
  }
  doStuff();
}
...

Метод onReceive () BroadcastReceiver:

public void onReceive(Context context, Intent intent) {
  if (EXTRA_NETOWRK_INFO does show that network is ready) {
    synchronized (networkReady) {
      networkReady = true;
      notify();
    }
  }
}

В настоящее время я получаю сообщение об ошибке: «объект не заблокирован потоком перед уведомлением». и я не могу понять, как заставить это работать ... Еще одна альтернатива, я думаю, будет вращаться вокруг флага networkReady с маленькими Thread.sleep (#), но это действительно не похоже на хорошая практика для меня;) Есть идеи?

1 Ответ

2 голосов
/ 23 февраля 2012

На самом деле вы ожидаете на объекте потока, wait ();означает this.wait ();но во время уведомления вы уведомляете об объекте получателя.так что вы получаете ошибку.Попробуйте подождать и уведомить об этом же объекте, скажем, сама NetworkReady.

...