从onReceive()中调用notify()?

时间:2012-02-23 09:05:58

标签: android multithreading broadcastreceiver wait notify

所以我正在尝试编写一小段android代码,我希望一个线程A等待(),直到网络连接可用。线程A应该做一些与wifi相关的事情,因此BroadcastReceiver注册了意图WifiManager.NETWORK_STATE_CHANGED_ACTION。我现在正在做的是这样的事情:

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

BroadcastReceiver的onReceive()方法:

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

目前我收到错误:“对象在通知之前未被线程锁定。”而且我无法弄清楚如何让这个东西起作用...另外一个选择我想用旋转带有小Thread.sleep(#)的networkReady标志,但这真的不像我的好习惯;)任何想法?

1 个答案:

答案 0 :(得分:2)

实际上你正在等待线程对象,wait();意思是this.wait();但在通知期间,您正在通知接收方对象。所以你得到错误。尝试等待并在同一个对象上通知networkReady本身。