Фоновое исполнение задач в 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 останутся довольными.
Добавить комментарий