Является ли iOS 4 "Real Multitasking" доступным для сторонних разработчиков?

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

Я думаю о приложениях IM или IRC, например. Ive скомпилировал приложение самостоятельно на iOS 4, и, не меняя вещи, казалось, что он работает в фоновом режиме, но для всех, кого я знаю, он просто был приостановлен в памяти.

В документах говорится, что самое лучшее, что вы можете сделать, это запросить до 10 минут, но в презентации разработчика они показали, что Skype сидит в фоновом режиме, а затем уведомляет пользователя о том, что звонок поступает. Кто-нибудь знает наверняка, как это все работает?

Ответ 1

Кажется, ответ отрицательный. API для Skype - это особый случай, называемый режимом "voip", и требует особого поведения, такого как маркировка сокета, используемого для VoIP.

Вы можете получать уведомления о тревоге в фоновом режиме (например, время, прошедшее). Время, в течение которого вы находитесь в фоновом режиме, сильно ограничено ОС.

Фоновая модель Android завершена и во многом намного приятнее.

В Apple есть руководство под названием "Поддержка многозадачности в ваших приложениях", которое вы должны найти.

Ответ 2

Документация разработчика Apple iOS 4 описывает это очень четко.

Когда ваше приложение закрыто или выключено, оно почти сразу "приостанавливается", что означает, что ОС зависает от состояния приложения. Когда пользователь переключается обратно в ваше приложение, ваш код продолжает работать, где он не работает. Вам не нужно добавлять код в свое приложение, чтобы сделать это, просто скомпилируйте его с OS 4.

В большинстве случаев это справедливо. Есть две причины, по которым "приостановленная" модель может не применяться:

1) Если устройство начинает работать с низким объемом памяти, ОС начнет завершать приостановленные приложения, которые не были переключены на некоторое время, без предупреждения. Вот почему в ваших интересах для вашего приложения также помнить, что это состояние также, поэтому, если ваше приложение завершено, то снова открывается, пользователь действительно не замечает, потому что он по-прежнему возвращается вправо, где они остановились.

2) В вашем приложении используется один из "фоновых" API. Это для воспроизведения звука, услуг VoIP или служб определения местоположения. В этом случае ваше приложение может продолжать работать в фоновом режиме, но имеет доступ только к этим API. Кроме того, ваше приложение может назначить определенные длительные задачи как "фоновые задачи", которые необходимо выполнить до того, как приложение будет приостановлено или завершено, например, загрузка изображений на Flickr или предоставление видео и т.д.

Метод "фоновой задачи" не распространяется на pinging-серверы на неопределенный срок, так как существует ограничение по времени для задачи, после чего она будет принудительно остановлена. Ожидается, что приложения, которые нуждаются в такой функции, будут реализовывать push-уведомления, как и раньше.

Это должно прояснить это. В целом я считаю это довольно элегантным решением для многозадачности на мобильном устройстве.

Ответ 3

Приложения iOS 4 могут быть запущены или приостановлены. Операционная система будет пытаться сохранить как можно больше запрошенных приложений в памяти, а все остальные приложения приостановлены.

Приложения, которые работают в фон, могут получить доступ к таким функциям, как навигационная система, аудио и VOIP (но НЕ). Похоже, вам может быть не повезло.

- PC World Многозадачность на Apple iPhone 4

Ответ 4

Приложения могут запрашивать фоновое время. Прочтите документы. Я бы сказал, что iOS "управляется многозадачностью".

Ответ 5

Вы можете создать многолетнюю фокусную задачу, я считаю, что они могут включать сетевые функции. Просто нужно установить флаг фоновой задачи на рабочий блок.

https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

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

Ответ 6

iOS 4 имеет "реальную" многозадачность в некоторой степени. Есть две вещи, которые следует учитывать:

  • Цикл событий пользовательского интерфейса представляет собой единую задачу. Таким образом, только фронт-приложение выполняется в цикле событий пользовательского интерфейса. Не большое дело: отсоедините свой основной код от цикла событий пользовательского интерфейса (возможно, вам нужно перепроектировать ваше приложение).
  • ОС "может" прекратить ваше приложение, если выполняются некоторые критерии (например, низкая память).

В настоящее время одним из этих критериев является то, что время выполнения ограничено 10 минутами (время в реальном времени, а не время процессора). Однако я ожидаю, что это изменится и увидят лучшие критерии завершения фонового приложения (надеюсь).

Кроме того, вы можете таймеры (циклы событий) в фоновом режиме.

Ответ 7

В iOS 4.2 нет реальной многозадачности. потому что приложениям разрешено только завершить задачу, связанную с состояниями.. в течение небольшого промежутка времени, а затем она будет находиться в состоянии приостановления. Если вы установите фокусную задачу на большой промежуток времени, тогда... она будет вести себя неожиданно, как ни один метод не будет вызываться, когда вы попытаетесь запустить приложение из любой точки.

Ответ 8

Вам может быть интересно это сообщение в блоге, в котором описывается, как "многозадачность" работает в таких системах, как iPhone OS 4 и Android.

Ответ 9

на самом деле вы можете это сделать, хотя Apple этого не допускает. u должен настроить toolchain в mac mac и использовать неофициальный SDK...

проверьте http://code.google.com/p/iphone-backgrounder/ для получения дополнительной информации

Ответ 10

Вы должны использовать фреймворк Push Notifications для созданного вами набора функций!