FOR WINDOWS 8 CAMP ATTENDEE USE ONLY
Что дизайнер должен знать о разработке приложений в стиле Metro для Windows
Платформа Windows 8 Metro style Apps HTML JavaScript C C++ C# VB Desktop Apps Win32.NET / SL Internet Explorer Communication & Data Application Model Devices & Printing WinRT APIs Graphics & Media System Services JavaScript (Chakra) C C++ C# VB XAMLHTML / CSS View Model Controller Windows Core OS Services Core
Архитектура Windows Runtime Приложение в стиле Metro Языковая поддержка (CLR, WinJS, CRT) Language Projection Windows Metadata & Namespace Web Host (HTML, CSS, JavaScript) Windows Core Runtime Broker Windows Runtime Core UIPickersControlsMedia XAMLStorageNetwork… DirectX Win32
Когда приложения исполняются? Windows 8 – управляется системойWindows 7 – управляется пользователем
Жизненный цикл по шагам Исполнение Завершение … Приостановка Завершение работы приложения без предупреждения Приостанавливается после небольшой задержки Быстро восстанавливает работу из приостановленного состояния
Приостановленное состояние Системные ресурсы сфокусированы на приложении, с которым пользователь взаимодействует Неактивные приложения не тратят ресурсы батарейки и системы, они приостановлены ОС Быстрое переключение между приложениями!
Завершение работы Системе требуется больше памяти Переключение между пользователями Пользователь закрыл приложение Завершение работы системы Приложение «упало» Приложение не получает оповещение, когда система завершает его работу!
Регистрация на обработку Suspend/Resume //Register for the Suspending event and call suspendingHandler when received Windows.UI.WebUI.WebUIApplication.addEventListener("suspending", suspendingHandler); //Handle the suspending event and save the current user session using WinJS sessionState function suspendingHandler(eventArgs) { //We are getting suspended } //Register for the Resuming event and call resumingHandler when received Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", resumingHandler); function resumingHandler() { //We are getting resumed, in general do nothing }
«Под капотом» Suspend Приостановленные приложение не попадают в планировщик NT Kernel Не используются ресурсы CPU, диска и сети Все потоки приостановлены Приложение остаётся в памяти Ядро гарантирует что приложение не будет приостановлено в критической секции, чтобы не было взаимных системных блокировок Приложение быстро восстанавливает работу из приостановленного состояния, когда к пользователь к нему переходит
Советы, как создать приложение, которое будет выглядеть актуальным
Сохраняйте и восстанавливайте состояние сессии пользователя Сохраняйте и восстанавливайте пользовательские метаданные «Где» пользователь находится в приложении HTML/JS Используйте объект WinJS.Application.sessionState Автоматически сериализует набор свойств на диск при suspend Загружает набор свойств с диска при активации Не загружает состояние после сбоя приложения XAML and C++ Класс SuspensionManager, доступный в примерах SDK, делает то же самое, что и sessionState в HTML/JS
Лучшие практики по сохранению/восстановлению данных СценарийНеобходимо Пользователь использует приложение Сохранять пользовательские данные инкрементально Пользователь приключился из приложения (Suspending) Сохранять состояние «где» находится пользователь, например, на каком экране Не-работающее приложение запущено пользователем (Activated) Восстановить состояние приложения для пользователя, как будто он не выходил из приложения Приостановленное приложение запущено пользователем (Resuming) Ничего не делать
демонстрация Сохранение и восстановление состояния
Переходы между состояниями User Launches App Splash screen
Запуск приложений
Приложения запускаются по другому Приложение запускаются из меню Пуск Активация с тайла, поиска, расшаривания и т.д.
Активация приложений по контрактам Приложение активируются по контрактам Запуск, поиск, место куда расшарить и т.д. Приложению необходимо выполнить специфические для контракта действия Предоставляется контекст launch shareTarget контракт search
Экран-заставка при активации Система предоставляет механизм экрана заставки для перехода к вашему приложению Отображается пока Windows запускает ваше приложение Отображается при активации Разработчик указывает цвет и картинку в манифесте приложения Приложение должно показать окно в течение 15 секунд активации или оно будет завершено системой
Расширенный экран-заставка После первого запуска приложения, кэшируйте данные, чтобы последующие запуски были быстрее Для приложений, которые загружаются дольше: 1. Сделайте первое представление вашего приложения, имитирующим экран заставку 2. В обработчике активации (Activated) правильно позиционируйте представление 3. Добавьте индикацию загрузки или любое другой интерактивный UI, чтобы пользователь знал, что делает приложение
Контракты
Контракты – часть большого семейства App to App Picking contract Contact Picker File activation Play To contract Print task settings Protocol activation Search contract Settings contract Share contract
Контракты позволяют приложениям интегрироваться в систему и между собой
ShareSettingsSearch App to App PickingPlay To
Контракт «Поиск» Search
Благодаря Контраку Поиска в приложениях можно искать без их запуска
Поиск доступен всегда и учитывает контекст
Как устроен поиск 1. Изначально контекстом является текущее приложение 2. Варианты для подстановки предлагает само приложение 3. Доступно переключение в контекст всех приложений, реализющих контракт Поиска
4. Варианты результатов также предоставляются приложением Должен включать превью и заголовок Обозначает высокое соответствие введенной фразе Как устроен поиск
Контракт «Поделиться» Share
Контракт «Поделиться» позволяет организовать контекстную передачу данных между приложениями
Windows 8 организует это так максимально просто и «бесшовно» для пользователя
В приложении-источнике следует предусмотреть максимальное число исходных форматов данных
Контракт «Настройки» Settings
Контракт «Настройки» дает возможность организации единообразной контекстной реализации настроек приложений
Контракты – часть большого семейства App to App Picking contract Contact Picker File activation Play To contract Print task settings Protocol activation Search contract Settings contract Share contract
Приложения, которые работают даже когда их не видит пользователь
Проигрывание аудио в фоновом режиме Приложения могут проигрывать аудио в фоновом режиме Разработчик должен указать это в манифесте Каждому аудио-потоку присваивается тип (communication, media, game) Только один поток может играть в каждую единицу времени
Загрузка/выгрузка в фоновом режиме Используйте BackgroundTransfer API для загрузки или выгрузки по HTTP в фоновом режиме Запустите загрузку/выгрузку в работающем приложении и оно продолжится, даже когда приложение приостановит свою работу
RTC приложения
Lock Screen приложения Работающие в фоновом режиме Коммуникации в реальном времени (Mail, IM, VoIP) Исполняются периодически Исполняются по системным событиям
Жизненный цикл … для RTC приложений
Execution = Trigger + [Condition] TriggerCondition InternetAvailable, InternetNotAvailable, SessionConnected, SessionDisconnected, UserNotPresent, UserPresent TimeTrigger* PushNotificationTrigger* SessionStart* ControlChannelTrigger*(**) ServicingComplete SessionConnected SessionDisconnected SmsReceived TimeZoneChange UserAway/UserPresent, LockScreenApplicationAdded/Removed OnlineIdConnectedStateChangeInternetAvailable InternetAvailable/InternetNotAvailable NetworkNotificationChannelReset NetworkStateChange MaintenanceTrigger PushNotificationTrigger** *requires lock permission **can run in App (not BackgroundHost.exe)
Пользователь продолжает контролировать
Ресурсы дозируются Квота CPUПеродичность Lock screen приложение 2 CPU сек15 минуты Не-lock screen приложеие 1 CPU сек2 часа
Используйте живые тайлы, чтобы показать, что приложение всегда работает
Контент – превыше всего. Всегда.
Живые плитки Tiles
Живые плитки Еще один способ взаимедействия и доставки контента Презентуют приложение пользователю Продолжают работать всегда Заставляют вернуться к себе
Квадратный (1x1) Широкий (2x1) Обычные плитки Оба размера поддерживают обновление Запускают приложение Статический заголовок Два размера:
Живые плитки Шаблоны представляют собой способы отрисовки Обновляются через несколько техник- шаблонов Текст, изображения или комбинация JPEG или PNG не более150 KBАнимация Локальное обновление или из «облака»
Очередь обновлений на плитках Возможна цикличная демонстрация пяти последних обновлений По умолчанию показывается только последнее обновления
Дополнительные плитки Secondary Tiles Закрепление контента или элементов приложения Инциируется приложением Необходимо подтверждение пользователя Создает персонализированный срез приложения Те же возможности, что и у обычных плиток
Всплывающие уведомления
Всплавающие уведомления Toast Notifications Показывают сообщения от приложений и сервисов вне UI приложений Привлекают внимание Отключаемы Позволяют пользователю переходить сразу к соответствующему разделу приложения Инициируются локально или из «облака»
Шаблоны уведомлений Таже архитектура шаблонов, что и у живых плиток
Windows Push Notification Service (WPNS)
Windows Push Notification Service Обслуживает уведомления и обновления живых плиток внешними сервисами Плитки обновляются, а уведомления работают даже при неработающем приложении Берет на себя управления коммуникациями с устройствами Масштабируется без вашего участия Бесплатен
Обзор архитектуры WINS Windows 8 Cloud Service Windows Push Notification Service Metro Style App Notification Client Platform Запрос на URI канала уведомлений 2.Регистрация сервиса 3.Уведомления
Используйте живые тайлы Полезно пользователю даже когда он не запустил приложение Даёт пользователю ощущение, что в вашем приложение что-то происходит и, одновременно, приглашение к возвращению обратно Два способа обновления тайлов на стартовом экране Локальное обновление Push notification