我目前正在有根的Android设备上编译和执行一些C++代码。我使用adb(adb shell)。为了编译我的代码,我不使用 NDK,但我使用 CMake 交叉编译
我正在使用unistd.h的函数sleep(seconds)
。
我在Android上使用该功能经历了一些奇怪的行为:基本上,我有一个for循环,其中我std::cout的东西,然后调用sleep(x)
。
如果我调用sleep(1)
,则行为是预期的:程序等待 1 秒,然后执行下一条指令。
如果我打电话给sleep(2)
,行为不是预期的。该程序永远停留在该指令上。直到我按下 PC 键盘上的一个键(不是设备的键盘),然后它卡在下一个sleep(2)
......直到我按下键,等等...
仅当设备屏幕关闭时,才会发生此行为。一旦我单击电源按钮打开屏幕,程序就会恢复并具有预期的行为。
注意:行为与usleep(useconds)
相同
我试图查看限制在 1 到 2 秒之间:1.5秒、1.25秒、1.125秒 ->始终保持封锁状态 |1.0625s -> ~50% 几率保持封锁。
显然,如果线程睡眠超过 1 秒(至少 2 秒),有一些东西会阻止线程唤醒。所以我的问题是,有没有人知道为什么会发生这种情况,并对过程有详细的解释?
谢谢!
进行任何用户交互时将应用程序置于后台 - Unix睡眠和Java计时器等不会唤醒它们。 您必须使用安卓警报或可运行的 postDelay 处理程序。