IOS:应用程序进入后台后检测到锁定?

问题描述:

应用程序进入后台后有没有办法检测锁定?例如,IOS:应用程序进入后台后检测到锁定?

  1. 我有我的应用程序(A)在前台
  2. 然后我把另一个应用程序(B)到前台开
  3. 然后锁定屏幕

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

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

应用程序实际上具有比活动和背景更多的状态。

的情况是:

  1. 活动
  2. 背景(仍然在运行,而另一个应用在前台)
  3. 暂停(在内存中,但没有得到任何CPU时间)
  4. 不运行。 (不再运行或在内存中)。

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

如果您需要更多时间来完成任务,当您收到通知您正在移动到后台时,可以使用beginBackgroundTaskWithExpirationHandler呼叫请求该任务。不过,截至撰写本文时,您最多只需要3分钟,然后您的到期处理程序就会启动并且您的应用程序被暂停。

由于这个原因,您实际上并不会在后台运行很长时间,而且很可能在用户锁定屏幕(或自动锁定)时,您已被暂停,并且不会得到通知。

+0

我的用例是,用户可以切换到另一个应用程序一段时间(

+0

我相信只要你只在短时间内在后台运行,并且明确定义了原因,他们也会一直这样。虽然我不会为苹果说话。 –

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

否,原因有二:

  • 无法检测,在任何情况下,该屏幕已被锁定。即使你的应用程序是最前面的,当屏幕锁定时,所有学习的是,你的应用程序是后台接地,没有你能够学习为什么

  • 您的的情况下,到屏幕锁定时,您的应用程序甚至没有运行 - 它已被暂停。所以它不能“检测”什么东西

+0

至于你的第一个陈述,它**是**可能检测到屏幕已被锁定。 (你使用'notify_register_dispatch'。参见[**这个线程**](http://stackoverflow.com/questions/14229955/is-there-a-way-to-check-if-the-ios-device-is )然而,第二个原因仍然存在,使锁定通知不是非常有用,除非你的应用程序设置为在后台运行。 –