Apple проделала ловкую работу по устранению недостатков настоящей многозадачности в iOS 4, предоставив разработчикам доступ к нескольким грамотно подобранным API (например, фоновый звук) и универсальному сохранению состояния.
Этого будет достаточно для большинства людей и большинства приложений, не вызывая огромного расхода заряда батареи или вычислительной мощности, но, к сожалению, новые API iOS 4 не делайте ничего, чтобы использовать одно из самых больших преимуществ многозадачности: фоновые приложения, которые могут обновлять или синхронизировать информацию, когда у них нет фокус. Другими словами, когда появится iOS 4, приложения, такие как программы чтения каналов, клиенты Twitter и программы обмена мгновенными сообщениями, по-прежнему должны будут быть открыты все время, чтобы получать новую информацию из Интернета.
В своем личном блоге Марко Армент, разработчик любимой Instapaper в App Store, написал: отличное предложение в Apple о том, как разрешить приложениям эффективно обновляться в фоновом режиме: дать iOS возможность назначать приоритет периодическим сетевым запросам сторонних приложений.
Добавление еще одной службы многозадачности решило бы эту проблему для многих типов приложений: периодический сетевой запрос. Вот как бы я это сделал:
• Приложение предоставляет системе NSURLRequest и идеальный интервал обновления, например каждые 30 минут, каждые несколько часов или каждый день.
• iOS выполняет этот запрос всякий раз, когда считает нужным, и сохраняет ответ в локальный файл.
• При следующем запуске приложения iOS передает ему NSData самого последнего ответа.
Выполнение запроса «всякий раз, когда он сочтет нужным» имеет важное значение. iOS может решить, например:
• Не обновлять при низком уровне заряда батареи, плохой связи, выполнении других запросов, низком уровне свободной памяти, высокой загрузке ЦП или превышении пользователем месячного лимита данных.
• Не обновлять так часто, как запрашивает приложение, или увеличивать интервал с течением времени, или динамически корректировать интервал в зависимости от того, как часто он получает ответ 304 (Not Modified).
• Не обновлять вообще, если запрашивающее приложение долгое время не запускалось.
Это позволит Instapaper загружать обновления в фоновом режиме, а также принесет большую пользу читателям RSS, клиентам Twitter, чату. программы, виджеты погоды и новостей, а также огромное количество других приложений, которые в настоящее время не могут получить большую пользу от iOS » многозадачность.
Я, конечно, не системный архитектор, но мне кажется, что это эффективное решение. На самом деле, это настолько понятное и очевидное решение, что мысль о том, чтобы дождаться обновления iOS 5 за такую функциональность меня немного трясёт... хотя это мог быть вчерашний Talisker говорить.