Я работаю над приложением, где я синхронизую данные с сервером и с него, когда приложение входит в фон и приложение становится активным. Поскольку при синхронизации с несколькими устройствами данные должны обновляться на всех устройствах.Эффективно синхронизировать данные в iOS
Так вот как я это делаю,
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if([[AppManager instance].globalManager activeSyncCounter] == 0)
{
[_webService callServerAPI];
}
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if([[AppManager instance].globalManager activeSyncCounter] == 0)
{
[_webService callServerAPI];
}
}
Позвольте мне объяснить код, указанный выше
1) Я звоню API, чтобы синхронизировать свои данные, я итерацию через цикл для синхронизации мои данные (все вызовы являются асинхронными)
2) Как вы можете видеть, я использовал activeSyncCounter. Я использовал это, потому что пользователь может немедленно открыть и закрыть приложение, чтобы серверные API не вызывались снова, до тех пор, пока первый не завершится.
Теперь вот мои сомнения.
1) Во-первых, когда я получаю ответ от сервера, когда данные больше, требуется время для обновления, проходящего через цикл for, и мой пользовательский интерфейс становится невосприимчивым. Чтобы улучшить это, мне нужно запустить код цикла for внутри очереди отправки. Или это их другой лучший способ сделать это?
Кроме того, поскольку обновление выполняется, когда приложение входит в фоновый режим, так мне нужна диспетчерская очередь, когда приложение входит в фон?
2) Во-вторых, их любая альтернатива для использования activeSyncCounter
Здравствуйте @ipmcc, я использую только асинхронные сетевые API. Поэтому я должен использовать очереди отправки, когда я обрабатываю ответ с сервера правильно? Но обработка ответа с сервера происходит, когда приложение вводит фон. Итак, нужны ли очереди отправки, когда приложение входит в фон или только когда приложение становится активным? – Ranjit
Итак, это постобработка, которая занимает много времени, а не сетевую операцию? Тогда да, просто сделайте это на заднем плане для каждой ситуации. Нет ничего, что можно было бы сделать, сделав это в основном потоке в случае, когда ваше приложение находится в фоновом режиме. – ipmcc
Да, после обработки занимает время – Ranjit