【发布时间】:2015-12-21 17:40:39
【问题描述】:
有没有办法在应用进入后台后检测锁定?例如,
- 我在前台打开了我的应用程序 (A)
- 然后我将另一个应用程序 (B) 带到前台
- 然后锁屏
(A) 是否有可能检测到锁?
【问题讨论】:
有没有办法在应用进入后台后检测锁定?例如,
(A) 是否有可能检测到锁?
【问题讨论】:
答案是“理论上是的,但通常不是。”
应用实际上有比活动和后台更多的状态。
状态是:
当用户切换应用、按下主页按钮或锁定他们的设备时,您的应用会收到通知,通知它正在进入后台,但实际上它只在后台运行很短的时间。它几乎立即转换为暂停。一旦您被暂停,您可以随时终止,恕不另行通知。
如果您在收到将被移至后台的通知时需要更多时间来完成任务,您可以使用beginBackgroundTaskWithExpirationHandler 呼叫请求。但是,在撰写本文时,您最多只能等待 3 分钟,然后您的过期处理程序会触发并且您的应用会暂停。
因此,您实际上不会在后台运行很长时间,并且很可能当用户锁定屏幕(或自动锁定)时,您已经被暂停并且没有通知。
【讨论】:
(A)是否有可能检测到锁?
不,有两个原因:
在任何情况下,您都无法检测到屏幕已被锁定。即使您的应用在屏幕锁定时位于最前面,您所知道的只是您的应用是后台,而您无法了解为什么 .
在你的场景中,当屏幕被锁定时,你的应用甚至还没有运行——它已经被挂起。所以它不能“检测”任何东西。
【讨论】:
notify_register_dispatch。请参阅this thread。)但是,您的第二个原因仍然存在,除非您的应用程序设置为在后台运行,否则锁定通知不是很有用。