我有一个AnyObject
类,其中包含嵌套 MyService
类:
BroadcastReceiver
如上所述,当调用public class MyService {
private Object lock;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
synchronized(lock) {
doTask();
lock.wait();
Log.d(TAG, "After wait ...");
}
}
}
private synchronized void doTask() {
Log.d(TAG, "do task ...");
synchronized(lock) {
lock.notify();
}
}
}
时,我的代码会在onReceive()
块中运行doTask()
。然后,在synchronized
函数中,我的代码运行doTask()
。我希望看到登录终端lock.notify()
我运行我的Android项目。当onReceive()被触发时,我可以看到日志“做任务...... ”,然后,它挂在那里,我看不到日志“等待...... < / strong>“,为什么我的等待通知没有按预期工作?
答案 0 :(得分:0)
我运行我的Android项目。当onReceive()被触发时,我可以看到 log&#34;做任务...&#34;然后,它挂在那里,我看不到log&#34; After 等等......&#34;,为什么我的wait-notify没有按预期工作?
BroadcastReceiver
始终在ui线程上运行。如果MyService
在Ui线程上运行,那么您遇到的就是死锁。也可能MyService
在后台线程上运行。如果在等待之前执行通知,则运行MyService的线程正在等待下一个通知