IOS: обнаружение блокировки после того, как приложение перешло в фоновый режим?

Есть ли способ обнаружить блокировку после того, как приложение перешло в фоновый режим? Например,

  1. У меня открыто приложение (A) на переднем плане
  2. Затем я вывожу другое приложение (B) на передний план
  3. Затем заблокируйте экран

Может ли (А) обнаружить замок?


person Grace Shao    schedule 21.12.2015    source источник


Ответы (2)


Ответ: «Теоретически да, но обычно нет».

Приложения на самом деле имеют больше состояний, чем активное и фоновое.

Штаты:

  1. Активный
  2. Фон (все еще работает, но другое приложение находится на переднем плане)
  3. Приостановлено (в памяти, но не получает процессорного времени)
  4. Не бегать. (больше не работает или находится в памяти.)

Когда пользователь меняет приложения, нажимает кнопку «Домой» или блокирует свое устройство, ваше приложение получает уведомление о том, что оно переходит в фоновый режим, но на самом деле оно работает в фоновом режиме только ОЧЕНЬ короткое время. Он переходит в приостановленный почти сразу. После приостановки вы можете быть уволены в любое время без дополнительного уведомления.

Если вам нужно больше времени для завершения задачи, когда вы получаете уведомление о том, что вас переводят в фоновый режим, вы можете попросить об этом с помощью вызова beginBackgroundTaskWithExpirationHandler. Однако на момент написания этой статьи вы получаете не более 3 минут, а затем срабатывает обработчик истечения срока действия, и ваше приложение приостанавливается.

В результате вы на самом деле не можете работать в фоновом режиме очень долго, и вполне вероятно, что к тому времени, когда пользователь заблокирует экран (или он заблокируется автоматически), вы уже приостановлены и не получаете уведомления.

person Duncan C    schedule 21.12.2015
comment
Мой вариант использования заключается в том, что пользователи могут ненадолго (‹= 1 минута) переключиться на другое приложение, просто чтобы что-то изменить, и вернуться к нашему приложению. Если я поставлю новый таймер, когда приложение ставится на фон, как вы думаете, это возможно? Как вы думаете, Apple позволит? - person Grace Shao; 21.12.2015
comment
Я считаю, что они будут, если вы работаете в фоновом режиме только в течение короткого времени и по четко определенной причине. Однако я не претендую на то, чтобы говорить за Apple. - person Duncan C; 22.12.2015

Может ли (А) обнаружить замок?

Нет, по двум причинам:

  • Ни при каких обстоятельствах вы не можете обнаружить, что экран заблокирован. Даже если ваше приложение находится на переднем плане, когда экран заблокирован, все, что вы узнаете, это то, что ваше приложение было фоновым, но вы не сможете узнать, почему .

  • В вашем сценарии к моменту блокировки экрана ваше приложение даже не работает — оно было приостановлено. Поэтому он не может «обнаружить» ничего.

person matt    schedule 21.12.2015
comment
Что касается вашего первого утверждения, можно обнаружить, что экран заблокирован. (Вы используете notify_register_dispatch. См. эта ветка.) Тем не менее, ваша вторая причина остается в силе, делая уведомление о блокировке не очень полезным, если только ваше приложение не настроено для работы в фоновом режиме. - person Duncan C; 21.12.2015