WedX - журнал о программировании и компьютерных науках

Правильно ли работает событие appPaused? Я получаю странное поведение с моим кодом очистки на iOS

Я занимаюсь этой проблемой в течение нескольких недель и не уверен, является ли это ошибкой моего кода, событием appPaused forge недостаточно быстро, или документация Trigger.io недостаточно ясно показывает, как мало времени iOS дает нам для выполнения очистки. код.

Согласно документации по событию appPaused:

  • iOS: на выполнение дается короткий промежуток времени, обычно лучше предположить, что обратные вызовы и таймеры могут не срабатывать, пока приложение не будет возобновлено.

Мое приложение имеет дело с веб-сокетами, и в идеале я могу отправить событие закрытия на свой сервер, когда пользователь сворачивает мое приложение или телефон заблокирован. В настоящее время весь мой код очистки отлично работает на Android, но на iOS мой код очистки не запускается, пока приложение не будет возобновлено. Странная часть заключается в том, что иногда (возможно, в 1 из 20 раз) очистка iOS запускается правильно сразу после запуска события appPaused.

Чтобы проверить это, я сделал две вещи:

  1. Я делаю самое первое, что нужно запустить после запуска события appPaused, - это сообщение на мой веб-сервер, в котором говорится, что «приложение приостановлено». В 95% случаев это сообщение на самом деле не отправляется до тех пор, пока приложение не будет возобновлено, но остальные 5% времени мой веб-сервер получает его сразу после того, как я приостанавливаю приложение.

  2. Затем я сделал так, чтобы первое, что запускалось после запуска события appPaused, — это строка, которая хранит Date.now() в глобальной переменной. Затем я сохраняю Date.now() в другой глобальной переменной, когда приложение возобновляется, и нахожу разницу между ними. Это становится интересным, потому что примерно в 50% случаев строка Date.now() правильно запускается сразу после вызова события appPaused, но в другой половине случаев 2 вызова Date.now() составляют всего миллисекунды, что доказывает что код очистки не запускался до возобновления работы приложения.

Итак, могу ли я действительно ожидать, что у иногда будет достаточно времени после запуска appPaused, чтобы даже сохранить Date.now() в переменной? Это то, что испытывают все остальные при запуске своих приложений Trigger.io на iOS? Дайте мне знать, если кто-то может использовать дополнительную информацию.

04.05.2014

Ответы:


1

Да, запуск appPaused на iOS не гарантируется. Обратите внимание, что он может срабатывать только при возобновлении работы приложения. Любой код, который вы хотите запустить при переходе в фоновый режим, вероятно, не запустится. См. документацию по триггерам по событиям. Примечание по iOS требует внимательного прочтения.

Тем не менее, у меня есть приложение, похожее на ваше, работающее с веб-сокетами. Что я обнаружил, так это то, что я могу оставить сокет открытым, iOS автоматически убивает сокет, когда он приостанавливает приложение (через некоторое время после получения события paused, которое соответствует фоновому состоянию ios). Сервер получает событие закрытия, и вы, конечно, можете подключиться к этому событию, чтобы установить любое состояние или ресурсы очистки. Android требует ручного отключения сокета, но appPaused гарантированно работает, когда приложение находится в фоновом режиме.

01.10.2014
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]