【问题标题】:IOS: Detecting lock after the app has entered background?IOS:应用程序进入后台后检测锁定?
【发布时间】:2015-12-21 17:40:39
【问题描述】:

有没有办法在应用进入后台后检测锁定?例如,

  1. 我在前台打开了我的应用程序 (A)
  2. 然后我将另一个应用程序 (B) 带到前台
  3. 然后锁屏

(A) 是否有可能检测到锁?

【问题讨论】:

    标签: ios background-foreground


    【解决方案1】:

    答案是“理论上是的,但通常不是。”

    应用实际上有比活动和后台更多的状态。

    状态是:

    1. 活跃
    2. 后台(仍在运行,但另一个应用程序在前台)
    3. 已暂停(在内存中,但未获得任何 CPU 时间)
    4. 未运行。 (不再运行或在内存中。)

    当用户切换应用、按下主页按钮或锁定他们的设备时,您的应用会收到通知,通知它正在进入后台,但实际上它只在后台运行很短的时间。它几乎立即转换为暂停。一旦您被暂停,您可以随时终止,恕不另行通知。

    如果您在收到将被移至后台的通知时需要更多时间来完成任务,您可以使用beginBackgroundTaskWithExpirationHandler 呼叫请求。但是,在撰写本文时,您最多只能等待 3 分钟,然后您的过期处理程序会触发并且您的应用会暂停。

    因此,您实际上不会在后台运行很长时间,并且很可能当用户锁定屏幕(或自动锁定)时,您已经被暂停并且没有通知。

    【讨论】:

    • 我的用例是,用户可以切换到另一个应用程序一段时间(
    • 我相信只要您只在后台运行一小段时间,并且出于明确定义的原因,他们就会这样做。不过,我并没有声称要为 Apple 代言。
    【解决方案2】:

    (A)是否有可能检测到锁?

    不,有两个原因:

    • 在任何情况下,您都无法检测到屏幕已被锁定。即使您的应用在屏幕锁定时位于最前面,所知道的只是您的应用是后台,而您无法了解为什么 .

    • 你的场景中,当屏幕被锁定时,你的应用甚至还没有运行——它已经被挂起。所以它不能“检测”任何东西

    【讨论】:

    • 至于您的第一个语句,可以检测到屏幕已被锁定。 (您使用notify_register_dispatch。请参阅this thread。)但是,您的第二个原因仍然存在,除非您的应用程序设置为在后台运行,否则锁定通知不是很有用。
    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多