Фоновое исполнение задач в Windows Phone 7

Мой рассказ о мультизадачности в Windows Phone 7 вызвал неоднозначную реакцию среди будущих пользователей и разработчиков для этой мобильной платформы. В итоге за две недели я получил больше сотни комментариев из различных источников (в блоге, на сторонних ресурсах, в почте, в IM). В основном авторы этих комментариев были недовольны отсутствием многозадачности в Windows Phone 7. Давайте разберемся как же все-таки обстоят дела на самом деле.

Главное, что хочется сказать – это многозадачность в Windows Phone 7 есть (дочитайте до конца и убедитесь, что это действительно так). Процессы в операционной системе исполняются параллельно и могут обрабатывать задачи пользователя.

Путаницу вызывает то, что Windows Phone 7 приостанавливает приложения Silverlight и XNA при переключении на другое приложение или при возникновении какого-либо события (например, звонок по телефону). Более того, приложение может быть и вовсе удалено из памяти, если операционной системе будет недостаточно ресурсов (состояние приложение при этом не теряется и будет восстановлено операционной системой при следующем запуске приложения).

Однако, как я уже писал, команда разработчиков в ближайшем будущем начнет работы над созданием службы для выполнения фоновых задач. Это означает, что вы сможете написать собственную фоновую службу и запустить ее на Windows Phone 7. Эта служба будет работать как фоновый процесс и не будет прерываться операционной системой. При этом, судя по всему, приложение Silverlight или XNA сможет взаимодействовать с вашей фоновой службой и управлять ею.

Таким образом, для приложений, которым важна именно работа в фоне предлагается модель разработки, при которой приложение на Silverlight/XNA будет некоторой графической оболочкой, а фоновая служба – некоторой логикой, которая работает постоянно. В таком случае приостановка/выгрузка именно приложения Silverlight/XNA очень логично, поскольку это всего лишь пользовательский интерфейс для работающей в фоне службы (которая, напомню, не приостанавливается).

Кроме того, нужно не забывать о том, что в Windows Phone 7 существуют уведомление (Push Notifications), которые позволяют по внешнему событию восстановить работу и приложения Silverlight/XNA, т.е. по сути запустить нашу графическую оболочку.

Еще одним подтверждением наличия многозадачности является то, что эмулятор, поставляемый в составе Windows Phone Developers Tools CTP на данный момент не реализует полностью функциональность приостановки приложений в момент переключения. Это означает, что если мы напишем небольшое приложение, которое по таймеру увеличивает счетчик и отображает его на форме, запустим приложение и переключимся на другое приложение, то таймер все равно будет работать.

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

Примеры задач, требующих фонового исполнения, которые смогли привести мои собеседники:

  • клиенты IM (Jabber, ICQ, MSN, ..);
  • запись трека GPS (другие сценарии работы с GPS);
  • антивирусное ПО;
  • проигрывание музыки;
  • агенты для корпоративного использования;
  • загрузка почты;
  • будильник;
  • автоматическое обновление социальных служб (например, Twitter) при изменении условий (например, местоположения).

Как видно, предложенный подход к организации многозадачности позволяет покрыть каждый из этих сценариев. Это означает, что Windows Phone 7 есть полноценная многозадачность, а не "немного многозадачности".

На этом, я надеюсь, мифы об отсутствии многозадачности в Windows Phone 7 будут развенчаны, а будущие пользователи Windows Phone 7 останутся довольными.