wait()notify()未按预期工作



我有一个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()时,我的代码在synchronized块中运行doTask()。然后,在doTask()函数中,我的代码运行lock.notify()。我希望看到登录终端Log.d(TAG, "After wait ...");

我运行我的Android项目。当onReceive()被触发时,我可以看到日志"do task…",然后,它挂在那里,我看不到日志"After wait…',为什么我的等待通知没有按预期工作?

我运行我的Android项目。当onReceive()被触发时,我可以看到日志"做任务…",然后,它挂在那里,我看不到日志"之后等待",为什么我的等待通知没有按预期工作?

BroadcastReceiver总是在ui线程上运行。如果MyService在Ui线程上运行,则会出现死锁。也可能是MyService在后台线程上运行。如果在等待之前执行通知,则运行MyService的线程正在等待下一个通知

最新更新