因此,我正在尝试编写一小段android代码,其中我希望一个线程A等待(),直到网络连接可用。线程A应该做一些与wifi相关的事情,因此BroadcastReceiver被注册到intent 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标志,但对我来说这真的不是一个好的做法;)有什么想法吗?
发布于 2012-02-23 17:58:39
实际上,您正在等待线程对象,wait();表示this.wait();但在notify期间,您正在通知接收方对象。所以你得到了错误。尝试在同一对象上等待和通知,比如networkReady本身。
https://stackoverflow.com/questions/9409897
复制相似问题