Делает ли iOS 4 «Реальную многозадачность» доступной для сторонних разработчиков?

С тех пор, как вышла первая бета-версия, я пытался выяснить, возможна ли «настоящая» многозадачность — т. е. можно ли поставить программу в фоновый режим и заставить ее бесконечно висеть на сетевом соединении?

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

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


person Phil Kulak    schedule 09.06.2010    source источник
comment
У меня 0 опыта работы с iOS, поэтому это может быть бесполезно. Однако, почему бы вам просто не заставить его что-то делать во время работы в фоновом режиме, чтобы проверить, действительно ли он работает (например, обновлять счетчик каждую секунду)?   -  person Cam    schedule 09.06.2010
comment
Хорошая идея! Я собираюсь попробовать это сейчас ...   -  person Phil Kulak    schedule 09.06.2010
comment
Я просто установил таймер, который срабатывает каждую секунду и пингует мой веб-сервер. Конечно, таймер перестал срабатывать, когда приложение перешло в фоновый режим, хотя, когда оно вернулось, оно сразу же вернулось в состояние, в котором оно было, когда оно было приостановлено.   -  person Phil Kulak    schedule 09.06.2010
comment
@plkulak, у вас есть ссылка на документы, которые вы упоминаете в своем вопросе? Я ищу документацию по фреймворку «многозадачность» для os4, но пока не могу найти ни одного ресурса. Спасибо.   -  person Rigo Vides    schedule 14.06.2010
comment
зачем вам мгновенные сообщения в фоновом режиме, если вы их даже не видите. уведомлений о доступных сообщениях предостаточно, затем, когда вы снова переключаетесь на свое приложение для обмена мгновенными сообщениями, оно догоняет новые сообщения, вы получаете то, что вам нужно, и хорошее время автономной работы, что здесь такого особенного?   -  person    schedule 16.06.2010
comment
Вы должны быть зарегистрированным разработчиком Apple. Тогда довольно легко найти документы. @fuzzy: это слишком сложно. Мне приходится полагаться на какую-то сложную настройку сервера ретрансляции, которая, хотя и хороша в теории, никогда не работает очень хорошо. Beejive всегда подписывает меня примерно через минуту. У меня был Nexus One с Google Chat, который всегда работал в фоновом режиме, и батарея работала нормально. Я не думаю, что требуется много времени, чтобы просто оставить соединение зависшим.   -  person Phil Kulak    schedule 19.06.2010


Ответы (10)


Оказывается, нет. API для Skype — это особый случай, называемый режимом «voip», и он требует особого поведения, такого как пометка сокета, используемого для VoIP.

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

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

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

person Yann Ramin    schedule 09.06.2010
comment
Разработчикам проще справляться с полностью рабочим фоновым режимом, но он требует значительного времени автономной работы. Это компромисс дизайна, который Apple сделала здесь. Не хочу быть апологетом Apple, но вы можете понять выбор дизайна, если будете думать как пользователь, а не как разработчик. - person Dan Ray; 09.06.2010
comment
Я хочу это как пользователь. Мне нужны правильные приложения IRC и чата, и я хочу, чтобы разработчики могли свободно делать то, что им нужно для создания нужных мне приложений. Может быть, я гик-юзер, и не типичный, но я все же думаю как пользователь. - person Phil Kulak; 09.06.2010
comment
@pkulak, и, наоборот, вам нужна жизнь в тесте, которая хороша только на пару часов для того, что вы хотите. Настоящие конечные пользователи, не являющиеся разработчиками, хотят, чтобы телефон работал весь день и делал то, что им нужно, им все равно, КАК он это делает. Если кажется, что он делает то, что вы хотите, но делает это не так, как вы думаете, то какая разница. - person ; 16.06.2010
comment
зачем вам мгновенные сообщения в фоновом режиме, если вы их даже не видите. уведомлений о доступных сообщениях предостаточно, затем, когда вы снова переключаетесь на свое приложение для обмена мгновенными сообщениями, оно догоняет новые сообщения, вы получаете то, что вам нужно, и хорошее время автономной работы, что здесь такого особенного? - person ; 16.06.2010
comment
@fuzzy lollipop: мои телефоны Android прекрасно принимают сообщения в фоновом режиме и включают систему уведомлений, способную одновременно ставить в очередь более одного уведомления. - person Yann Ramin; 17.06.2010
comment
@theatrus Я никогда ничего не говорил об Android и о том, что он делал и чего не делал, но, поскольку вы упомянули об этом, время автономной работы на N1 (и большинстве других телефонов Android) ужасно. Один из моих друзей-разработчиков отказывается от своего N1, потому что он работает всего полдня, а его 3G работает полтора-два дня, делая то же самое. - person ; 17.06.2010
comment
вы можете создать длительную фоновую задачу... >developer.apple.com/iphone/library/documentation/iPhone/ - person William Denniss; 26.06.2010

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

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

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

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

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

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

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

person Alex Ford    schedule 16.06.2010

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

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

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

person Kevin Sylvestre    schedule 09.06.2010

Приложения могут запрашивать фоновое время. Читайте документы. Я бы сказал, что iOS — это «управляемая многозадачность».

person Moshe    schedule 16.06.2010

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

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

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

person William Denniss    schedule 26.06.2010
comment
Тем не менее, важно сделать как можно больше очистки перед переходом в фоновый режим. Если в телефоне мало памяти и ему нужно убить ваше приложение, вы вообще не получите никакого предупреждения, вас просто убьют. - person kubi; 26.06.2010

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

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

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

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

person Christian Fries    schedule 28.06.2010

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

person IPhoneCrazy    schedule 09.12.2010

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

person anthony    schedule 09.06.2010
comment
Обратите внимание, что Android не имеет таких же ограничений на услуги, как iOS. Вполне возможно, что служба, подключенная к сети, постоянно работает в фоновом режиме, в отличие от iOS. Сервис может быть запущен и остановлен приложением (или им самим), и сервис может запускать намерения (гораздо более гибкий, чем аналог iOS). Упомянутые уведомления называются широковещательными в Android и не требуют запущенной службы. - person Yann Ramin; 09.06.2010

на самом деле вы можете это сделать, хотя это не разрешено Apple. вам нужно настроить набор инструментов на вашем Mac и использовать какой-нибудь неофициальный SDK...

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

person DamningGodson    schedule 02.12.2010

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

person schwabsauce    schedule 18.05.2011