我在 Android 应用程序中有一个线程,我想在其操作的某个时间点等待:
- 来自另一个线程的通知,或
- 发生超时,我想实时指定。
目前我(大致)有以下几点:
...
doStuff();
synchronized(this) {
if (!notificationReceived) wait(TIMEOUTPERIOD);
}
doMoreStuff();
...
并在从另一个线程调用的方法中:
synchronized(this) {
notificationReceived = true;
notifyAll();
}
这几乎可以工作。事实上,它一直工作到调试和测试,直到我尝试在现场部署应用程序时才停止工作。因为事实证明 Object.wait() 中的计时器在手机 CPU 进入睡眠状态时停止。和 Thread.sleep() 中的一样。哎呀。
现在,我不介意电话睡着时电话不会返回(实际上我认为这是可取的——电话睡着时在任何时候都不需要操作的结果),但是如果电话在我的超时期间睡觉,我希望动作一醒来就触发。
我有什么办法可以做到这一点吗?我知道我可以使用 AlarmManager 在所需时间后向我发送广播 Intent,并将延续代码放入(什么......?广播接收器?我以前从未这样做过......)但这会使我的应用程序的逻辑。那么:有没有更简单的方法可以在我的线程中放置(可取消的)实时延迟?