Лучший метод жизненного цикла для размещения основной операции блокировки потоков в Objective-C - PullRequest
0 голосов
/ 08 ноября 2018

Мое приложение синхронизируется с сервером, аналогичным приложению Apple Mail. Хотя синхронизация происходит в фоновом потоке, поскольку он довольно сильно воздействует на базовые данные, я посчитал необходимым заблокировать взаимодействие с пользовательскими элементами управления во время синхронизации, чтобы какая-то другая операция не ударила по основным данным и не создала проблем.

Я поместил синхронизацию в View Will Appear, чтобы поддерживать постоянную синхронизацию телефона и сервера. Однако, с большими объемами данных, я замечаю, что синхронизация недопустимо длинная ... то есть она связывает поток на пять или десять секунд. Я попытался поместить его в viewdidload, чтобы он вызывался реже, но все еще раздражает ожидание, когда вы только что открыли приложение.

Я заметил, что Apple не синхронизирует почту сразу, а ждет несколько секунд, чтобы сначала не связывать приложение. Это дает вам иллюзию, вам не нужно ждать (хотя на самом деле вы обычно это делаете).

Мне интересно, есть ли место в жизненном цикле, которое было бы лучше синхронизировать, например viewdidappear, а также есть ли способ использовать задержку для запуска синхронизации через пять или десять секунд после того, как вы находитесь в представлении контроллер, когда он менее заметен.

Заранее спасибо за любые предложения.

1 Ответ

0 голосов
/ 08 ноября 2018

Во-первых, блокировка основного потока не предпочтительна ни при каких обстоятельствах для асинхронных операций, так как пользователь будет думать, что приложение зависло, и выйдет из него

Во-вторых, viewDidAppear предназначен для обновлений, когда, скажем, он находится в виртуальном канале, к которому возвращается навигация с возвратом, чтобы обновить контент или закрыть модель, кроме тех двух вещей, с которыми он будет работать как viewDidLoad с накладные расходы на задержку

Наконец если вам нужно синхронизировать почту с сервером, у вас есть 2 варианта

  • захватывать данные каждый фиксированный момент времени (не рекомендуется), скажем, с помощью таймера

  • использовать автоматическое push-уведомление, чтобы уведомить приложение с сервером о новом контенте и инициировать процесс извлечения после его получения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...