rus | eng
PDF Печать RSS
Многозадачность в Windows Phone 7 Series  

Одним из наиболее спорным вопросом, обсуждаемых при рассмотрении Windows Phone 7 Series является многозадачность, а точнее ее отсутствие. Как выяснилось, этот вопрос вызывает озабоченность у большого числа пользователей и разработчиков. Давайте подробнее рассмотрим этот вопрос. Для этого обратимся к реализации многозадачности в Windows Phone Classic (старое название – Windows Mobile 5.x, 6.x).

В Windows Phone Classic многозадачность была реализована в полной мере. Это означает, что в один и тот же момент времени без приостановки могут выполнятся несколько приложений. Это, по сути, некоторый аналог настольной платформе, где этот процесс выглядит аналогичным образом. Однако, давайте подумаем – а действительно ли использование подобного подхода для мобильной платформы также обоснованно, как и для настольной?

Давайте попробуем представить типичный сценарий использования мобильных устройств. Наверняка он будет включать в себя использование нескольких приложений поочередно в течении длительного количества времени. Например, в данный момент я использую несколько таких приложений: просмотр фотографий, чтение электронной почты, чтение ленты Twitter, просмотр текущего трафика, Windows Media Player, редактирование и просмотр документов Microsoft Office, просмотр документов PDF, калькулятор и др. При длительном использовании устройства можно обнаружить, что в памяти загружены все или часть этих приложений, при этом в данный момент они совершенно не нужны, поскольку нет необходимости в их использовании. Тем не менее, в данный момент они действительно загружены в память и исполняются, загружают центральный процессор, занимают память и расходуют батарею. Конечно, некоторая часть пользователей внимательно следит за тем, чтобы в данный момент были загружены только необходимые приложения, но так делают далеко не все. Именно по этой причине использование подобного подхода не является обоснованным для мобильной платформы.

В некоторых мобильных платформах существует другая крайность – возможность запускать в каждый момент времени только одно приложение. Такой подход также не является правильным, поскольку иногда все же необходимо запускать одновременно несколько приложений. Классический пример – использование проигрывателя музыки в момент использования других приложений, например, чтении почты.

Разработчики Windows Phone 7 Series решили не прибегать к крайностям и выбрали золотую середину. В Windows Phone 7 Series в каждый момент времени может выполнятся только одно запущенное приложение. При этом существует набор системных приложений, которые могут выполняться “в фоне”. При переходе на главное окно или переключении на другие окна, текущее приложение переключается в приостановленное состояние. Что интересно, операционная система в произвольный момент времени может вовсе удалить этот процесс из памяти. Поэтому в момент приостановки следует сохранить состояние приложения, а в момент возврата к приложению – восстановить это состояние. Служебные механизмы Windows Phone 7 Series самостоятельно выполняют действия по сохранению и восстановлению состояния, поэтому разработчику приложения не нужно об этом заботиться. Пользователь при переключении между приложениями также не заметит никакой разницы, если приложение было удалено из памяти – он вернется к тому состоянию, в котором находилось приложение в последний раз.

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

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

Однако, ряд задач не могут быть реализованы при использовании описанного процесса. Дело в том, что есть некоторые задачи, которые требуют фонового исполнения. Например, это может быть приложение для записи GPS-трека пользователя или будильник, который должен сработать в определенный момент. К сожалению, в той версии Windows Phone 7 Series, которая была представлена на MIX 2010 эта функциональность не реализована. Однако, команда разработчиков в данный момент занимается этим сценарием и в ближайшее время мы с вами сможем попробовать реализовать и такие сценарии.

Таким образом, видно, что подход для организации работы множества приложений в Windows Phone 7 Series стал более эффективным, чем он был реализован ранее, в Windows Phone Classic.

23.03.2010 16:17 UTC+4
Аватар
23.03.2010 19:39 UTC+4
Это спорно. Единственное почему так как вы описываете лучше - это экономия батареи. Все остальное не очень существенные аргументы.
Экономия батареи, расход памяти, загрузка ЦП - несущественные аргументы? :) Приведите ваши аргументы - почему это плохо. Будет очень интересно.
Аватар
24.03.2010 04:45 UTC+4
Экономия батареи - это существенно! Я так и написал. А вот процессор и память - с ними проблем нету (я понимаю, что загрузка ЦП и всего остального связана с расходом энергии, но считаю что процессор и должен думать как энергию экономить, а не разработчик). И я не говорил что отсутствие многозадачности плохо, я лишь сказал что это для меня это спорно. Мне это на данный момент не очевидно. Как вы сами писали: " есть некоторые задачи, которые требуют фонового исполнения. Например, это может быть приложение для записи GPS-трека". Т.е. как минимум у нас есть - GPS и акселерометр. Возможно приложение, которое периодически отправляет куда-нибудь координаты, естественно для экономии батареи можно засыпать когда объект не движется, а просыпаться по акселерометру. Такое приложение должно постоянно работать в фоновом режиме. Если приложение будет постоянно делать SaveState/RestoreState вот это действительно может нагрузить процессор и соответственно откушать батареи. Ну и могут быть приложения которые периодически проверяют какие-нибудь ресурсы(веб или не веб). Хотя... ведь это все таки телефон. Посмотрим как разработчики реализуют задач, которые требуют фонового потока исполнения. Вот тогда можно будет обсуждать эту тему предметно, а пока это не реализовано, то и гадать нечего. Я ни в коем случае не хотел сказать что отсутствие многозадачности плохо, я хотел сказать что это спорно.
Я же упомянул, что специально для таких задач будет реализован отдельный механизм. Поэтому эта проблема отпадает ;)
Аватар
25.03.2010 11:54 UTC+4
Ну хорошо, а если представить себе приложение - мессенджер неподдерживаемого из коробки протокола, например, набившего оскомину ICQ. Весьма желательно чтобы такое приложение работало в фоне. Ну а в общем случае, любое приложение которое ждет внешних событий из сети. Что же касается идеи "телефон как телефон", то меня возмущает такой подход. Я хочу иметь выбор и иногда решать задачи, которые обычно решаются при помощи PC. Не должно быть таких вещей как "сценарий использования", ведь коммуникатор как таковой категорически выпадает из сценария использования телефона как звонилки.
В чем этот сценарий не укладывается в WP7?
Аватар
24.03.2010 05:41 UTC+4
Я не разработчик, а пользователеь. Поэтому мне до одного места, КАК именно это реализовано. Но вот использование аргументов в стиле «ведь это же телефон» (прозвучал в предыдущем комментарии) меня, честно говоря, напрягает. Ребята, если бы это был просто телефон — нам вообще не понадобилась бы разработка приложений. Ну хорошо, достаточно было бы разработки на уровне игр на яве :) По моему мнению, паттерны использования «телефона» всё сильнее и сильнее приближаются к паттернам использования настольного компьютера. И я не вижу здесь чёткой грани, которая могла бы определённо показать: вот до сих нам нужна многозадачность, а от сих она нам не нужна. Поэтому с моей точки зрения попытки отказа от многозадачности, отлично работающей в Windows Phone Classic, выглядят либо как шаг назад, либо как попытка изобрести велосипед. Или есть ещё какие-то серьёзные возражения против много задачности, кроме нагрузки на батарею?
Артем, от многозадачности не отказались. Просто сейчас используется более эффективная модель. Расскажи о сценариях, в которых тебе нужна многозадачность и мы посмотрим сможет ли WP7 работать в этом случае или нет.
Аватар
24.03.2010 06:25 UTC+4
Ну вряд ли я сходу придумаю что-то новое, кроме того, что уже многократно обсуждалось (проигрывание музыки, отправка координат и так далее). Плюс всякие агенты корпоративного ПО, которые должны быть всегда запущены и предназначены для работы в фоне (антивирусы, например). Ещё я испольую маленькую программку, которая висит в трее и зменяет собой шттаный индикатор батареи. Вместо картинки она выводит точный объём заряда в процентах и текущее время. Я понимаю, что данный конкретный пример не сильно релевантен разговору о WP7 (там такие программки, скорее всего, работать не будут). Я хочу сказать только то, что уже не раз говорил в дискуссиях про буфер обмена. Возможна масса сценариев, когда эта возможность понадобится. И эти сценарии настолько разные и узкоспециализированные, что предусмотреть их все в рамках встроенного фукнционала ОС, на мой взгляд, слабореально. Сейчас мы не задумываемся об этих функциях, потому что они у нас уже есть и всегда были, и мы воспринимаем их как само собой разумеющееся. Но когда эти возможности пропадут, и отработанные интуитивные сценарии ВНЕЗАПНО перестанут работать — мы можем ощутить неслабую боль в известном месте :)
Еще раз повторюсь. Работа приложений в фоновом режиме будет возможна. В каком виде это будет - сейчас непонятно, но оно будет 100%. Поэтому повода для беспокойства нет. Другой вопрос, что для этого скорее всего будет нужно создать фоновую службу, т.е. несколько иной подход к разработке. Но оно и хорошо - в фоне работать будут только те, кому это действительно нужно.
Аватар
24.03.2010 07:22 UTC+4
>Вы писали "По моему мнению, паттерны использования «телефона» >всё сильнее и сильнее приближаются к паттернам использования >настольного компьютера." Не соглашусь с вами. Я поразмышлял на эту тему, и вот что надумал. Вспомним iPhone - вспомните слова Стива на презентации iPhone: "iPhone это телефон... и iPod... и Web-браузер... " (и еще что-то, а что я забыл, вроде - игры). Так вот, он четко разделил ВАРИАНТЫ использования устройства. И там тоже однозадачность. Но она никого не расстраивает. В принципе Windows Phone 7 идет тем же путем. Скорее всего для фоновых приложений будет реализована штука, подобная "проталкиванию уведомлений", т.е. какой-нибудь маленький сервис который висит в памяти и ему нужно будет подать имя идентификатор приложения и параметры, и он уже запустит нужное приложение, или если оно фоновое, то запустится в фоновом режиме и выполнит необходимые операции. В принципе нормальная схема, главное это позволит батарею экономить. Но на самом деле это чисто маркетинговые ходы. Все производители и софта и железа хотят чтобы у нас были: 1. Смартфон 2. Нетбук (ну или устройство типа iPad, раньше это были UMPC) 3. Ноутбук (или PC) ах да, и иногда что то типа медиацентра. Так вот, функционал смартфона сейчас перекликается с функционалом нетбука (iPad'а), а так как рынок нетбуков растет, естественно что производители хотят чтобы мы поскорее приобрели эти устройства, лучший вариант, это отобрать у нас возможности на смартфоне, чтобы мы купили нетбук (ну или любое другое портативное устройство).
Интересные мысли, спасибо. Но я думаю, что все-таки тут всё проще :)
Аватар
24.03.2010 07:59 UTC+4
А вот представим такую вещь. Я, как сам себе программист, пишу веб-сервис и приложение для WP7 которое с ним работает. Неважно, что именно веб-сервис мне отдает, допустим погоду. Я хочу что-бы мое приложение по заданному расписанию обращалось к этому сервису и получало данные. Оно понятно, что запустив приложение и смогу обратиться к сервису, получить, обработать и показать всё, что хочу. А вот так что-бы оно само, без моего вмешательства забирало эту информацию и отображало на "интерактивном Life Tiles" будет реально при такой реализации "многозадачности"?
Ваш сценарий можно будет реализовать при помощи фоновых сервисов, которые будут доступны чуть позже. Однако, более правильно будет реализовать это используя механизм уведомлений (push notifications), о котором я расскажу чуть позже. Правильно с точки зрения потребления трафика, ЦП, батареи.
Аватар
24.03.2010 08:18 UTC+4
Да про Push Notification хотелось бы узнать подробнее. Пока только обтекаемые определения типа "проталкивает события на экран" и т.д. И еще два вопроса. Не по теме, но очень волнующих меня. 1. Минимальный размер Live Tiles такой, как на демках квадратик? Если я хочу разместить простенький элемент типа on/off WiFi или управление подсветкой на рабочем экране, как быть? 2. Список приложений так и останется длинной лентой, отсортированной по алфавиту? Надеюсь нет, потому что изображение этой ленты не встречается на официальных скриншотах.
Я постараюсь ответить на эти вопросы в следующих публикациях.
Аватар
25.03.2010 11:36 UTC+4
Мне одному кажется или Майкрософт вместо того чтобы реализовать фичу пытается доказать что эта фича никому не нужна? Да, это сложно, да Apple не смогли это реализовать, но блин я и не брал столько времени IPhone, потому что там нет многих фичей которые есть в WM 6.Х. А WM 7 это откат на первый релиз IPhone 3G т.е почти 3 года. >Экономия батареи, расход памяти, загрузка ЦП - несущественные аргументы? Как по- мне это совершенно не аргументы. Мне важна выполненая задача- записался GPS трек, пришло уведомление о полученной почте, пришел твитт. Если я захочу экономить батарею- куплю Нокию 1100. А сейчас я хочу чтоб мой коммуникатор РАБОТАЛ а не экономил электричество на планете. Как насчет гаджетов экрана приветствия, будет ли поддержка? А если я закрою GPS чтобы позвонить то запустив его опять получу тот же холодный старт?
Коллеги, я отвечу отдельным постом чуть позже.
Аватар
29.03.2010 06:06 UTC+4
"Пользователь при переключении между приложениями также не заметит никакой разницы, если приложение было удалено из памяти – он вернется к тому состоянию, в котором находилось приложение в последний раз." Неужели загрузка приложения в память (после его выгрузки) так быстра, что пользователь не заметит разницы в скорости переключения между приложениями (по сравнению со старым сценарием, в котором приложения висели в памяти) ? А расход энергии батарейки на закачку задач в память? Это может свести на нет всю энерго-экономию нового сценария. Да и вообще, я не хочу иметь только телефон, иначе я бы купил простенькую Нокию. Я хочу иметь в кармане пусть слабенький, но полноценный комп, с гибкой ОС, с возможностью написания собственных приложений. Комп, который обладает еще и ОПЦИЕЙ совершения телефонных звонков. Но прежде всего - комп :) Что касается мультизадачных сценариев, то вот пример простейшего. КПК-телефон должен одновременно осуществлять GPS навигацию с прорисовкой карты города, следить за поступлением новой почты, ожидать поступления моей голосовой команды на чтение этой почты вслух, одновременно периодически проверяя на WEB-сервисах с заданным интервалом ( порядка 30 - 60 секунд ) текущие цены на интересующие меня акции, с оповещением, в случае если цена достигла установленных мною пределов, опять же с ожиданием голосовой команды на покупку-продажу акции, которую приложение естественно произведет в автоматическом режиме работы с онлайн-брокером. Все это легко реализуется на старенькой 6.1 или 6.5. А как насчет 7???
Тоже можно. Напишу позже про это.
Аватар
12.04.2010 11:53 UTC+4
Подскажите, Сергей, на MIX о такой схеме работы многозадачности где-то говорилось и если да, то где?
Упомяналось в сессии Peter Torr (CL17), а также немного Istvan Cseri (CL18) об этом говорил.

Сергей Звездин

Сергей Звездин

Сергей Звездин: занимается разработкой программного обеспечения на платформе Microsoft .NET. Является обладателем статусов Microsoft MVP и Microsoft Regional Director.

Читать дальше →

Записи

  • Архив
  • Обсуждаемые

Twitter

Most Valuable Professional (MVP) Microsoft Regional Director