- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的应用程序使用 mach_absolute_time 计算自上次触摸事件以来的滴答声,并在超过 10 分钟的空闲时间限制时将用户注销。
这在 iOS 6 上一切正常,但我注意到它在 iOS 7 上表现不正确。具体来说,当 iOS 7 设备拔下电源(使用电池)时,设备似乎停止增加其滴答声按照控制台中的这一行进入休眠状态(这会在大约 5 分钟不活动后发生):
powerd[47] : Sleep: Using BATT (Charge:99%)
因此,当我在 10 分钟后唤醒设备并使用 mach_absolute_time 计算滴答时,差异显示只有 5 分钟(实际上,已经过去了 10 分钟)。
奇怪的是,当设备插入电源时,一切正常,滴答声继续运行。它从不显示设备在插入时将在控制台日志上休眠(尽管屏幕确实关闭并且行为在视觉上与拔下时相同)。
我也使用 clock_get_time 尝试过,但我也遇到了同样的问题。
我可以在 iOS 7 中做些什么来在设备进入休眠状态时保持 Mach 绝对时间滴答作响?我不想使用 [[NSDate date] timeIntervalSince1970]
,因为用户可以操纵系统时间并绕过它。
感谢任何见解。
最佳答案
事实证明,mach_absolute_time() 的默认行为是在设备进入休眠状态后停止计时。在 iOS 6 上,当使用 beginBackgroundTaskWithExpirationHandler
将应用程序置于后台时,我能够将暂停时间延长 10 分钟。然而,在 iOS 7 中,允许的最长时间限制为 3 分钟(通过调用 backgroundTimeRemaining
发现)。这就是为什么我看到时钟在 iOS 7 上停止,但在 iOS 6 上却没有。
偶然发现this answer今天,这似乎很有希望。
- (time_t)uptime {
struct timeval boottime;
int mib[2] = {CTL_KERN, KERN_BOOTTIME};
size_t size = sizeof(boottime);
time_t now;
time_t uptime = -1;
(void)time(&now);
if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 && boottime.tv_sec != 0) {
uptime = now - boottime.tv_sec;
}
return uptime;
}
time() carries on incrementing while the device is asleep, but of course can be manipulated by the operating system or user. However, the Kernel boottime (a timestamp of when the system last booted) also changes when the system clock is changed, therefore even though both these values are not fixed, the offset between them is.
关于ios - 当设备在 iOS 7 上进入休眠状态时,clock_get_time/mach_absolute_time 停止更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19817867/
我有一个 powershell 进程,它从远程服务器读取记录并将它们复制到本地数据库中。运行时,它可能会运行 8-12 小时。 如何防止计算机在此期间关闭(或进入休眠/休眠模式)?我知道我可以调整“电
是否有一些命令行或 AppleScript 可以编写/运行以使机器自动进入休眠状态,甚至更好地进入休眠模式? 我可以以 root 身份运行该程序。 最佳答案 osascript -e 'tell ap
我是一名优秀的程序员,十分优秀!