所以我正在尝试编写一小段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标志,但这真的不像我的好习惯;)任何想法?
答案 0 :(得分:2)
实际上你正在等待线程对象,wait();意思是this.wait();但在通知期间,您正在通知接收方对象。所以你得到错误。尝试等待并在同一个对象上通知networkReady本身。