Технический обзор возможностей платформы

реклама
Технический обзор возможностей
платформы Windows Phone
Стас Павлов
[email protected]
@stasus
платформа
Железо
Емкостной дисплей
4 или более точек контакта
Сенсоры
A-GPS, Accelerometer, Compass, Light, Proximity, Gyro
Камера
5 мегапикселей или более
Мультимедиа возможности
Минимальная спецификация, акселерация кодеков
Память
256MB RAM или более, 8GB Flash или более
GPU
Акселерация инструкций DirectX 9
CPU
Qualcomm MSM7x30, MSM8x55 800Mhz или более
Аппаратные кнопки | Назад, Старт,
Поиск
API
Приложения
Ваше приложение
Silverlight
Frameworks
XNA
CLR (.NET CF)
HTML/JavaScript
App Model
UI Model
Cloud Integration
App management
Licensing
Chamber isolation
Software updates
Shell frame
Session manager
Direct3D
Compositor
Xbox LIVE
Bing
Location
Push notifications
Windows Live ID
Kernel
Security
Networking
Storage
Hardware BSP
A-GPS
Media
Accelerometer
Wi-Fi
Hardware
Light
Radio
Compass
Graphics
Proximity
Gyro
Сервисы
Runtime
Tools
Sensors
Media Data
Location
Phone
Xbox LIVE
Notifications
.NET Framework managed code sandbox
Device
Cloud
Platform Services
Notifications
Location
Phone Emulator
Samples
Documentation
Guides
Community
Packaging and Verification Tools
Publishing Services
App Deployment
Registration
Marketplace
Identity
Feeds
Validation
MO and CC Billing
Social
Maps
Certification
Business Intelligence
Publishing
Update Management
Инструменты
http://create.msdn.com

Windows Phone SDK:
 Visual Studio 2010 Express Edition
 Expression Blend 4 for Windows Phone
 Windows Phone Extensions for XNA Game Studio 4.0
 Windows Phone Developer Registration Tool
 Application Deployment Tool
 Windows Phone Emulator
 Performance and Memory Profiler
 Marketplace Test Kit
Возможности
Камера
Сенсоры
Сеть
Данные
GPS
Прямой доступ
к изображению
и вспышке
SQL CE
Акселерометр
Запуск
и Выбор
Элементы
управления
Bing Maps
Базовые
элементы
Сокеты
E-mail
Компас
Фото и видео
Гироскоп
Сенсор
движения
Контакты
Информация о
соединении
Silverlight Toolkit
Номер
телефона
Календарь
Адрес
Еще больше –
от сообщества
Расширение базовых приложений
Тайлы
Заголовок, текст,
обратная сторона
Уведомления
Расширения
Search
Tile, Toasl, Raw
Обновление
программно и через
веб-сервис
Music
Deep Toast
Множественные тайлы
Photos
разработка
Платформа – 2 типа приложений
Современные
приложения, управляемые
событ-ми.
Быстрое создание богатых
графических приложений
HTML/Javascript
Устоявшаяся, надёжная,
популярная технология
Высокопроизводительная
игровая платформа
Быстрое создание
многоэкранных 2D и 3D игр
Богатая content pipeline
Устоявшаяся технология
для Xbox,
Windows, и Zune / WP7
Приложения
Игры
(и игры)
(и приложения)
Silverlight
Типы проектов
13
Что такое Silverlight
в Windows Phone
XAML
.NET CF
C#, VB.NET, F#
XAML
Наглядный язык разметки
 Поддержка включений файлов
 Полная интеграция в Visual Studio и Expression Blend
 Code Behind
 Data Binding
 Sample Data
 Storyboards
 Transform

Silverlight Controls
Silverlight Toolkit
Hub`ы: панорамы и пивоты
Декомпозиция экрана
Навигация



Frame
 Контейнер верхнего уровня
 PhoneApplicationFrame class
Page
 Управляет содержимым экрана
 Потомок PhoneApplicationPage class
Кнопка «Назад»
Ориентация
SupportedOrientations="Portrait"
SupportedOrientations="PortraitOrLandscape"


21
Можно ограничивать
Можно обрабатывать
 В большинстве случаев достаточно автоматической обработки
Input Scope
<TextBox InputScope="Number" ...
Панель приложения




до 4х иконок
48х48, ч/б и без круга
остальные пункты в
дополнительном меню
помните о текущем
контексте приложения
XNA
Что может XNA?






Мощная математическая библиотека
Content Pipeline
Работа с 2D графикой
Полноценная 3D графика (DirectX 9)
Поддержка шейдеров (встроенные)
Работа совместно с Silverlight
Производительность
Разработаны
с
Frameworks
designed
требованием
for
performance
производителности
Опробованныйdesigned
успех на
Frameworks
игровых сценариях
for performance
В будущее WP7
–с
Frameworks
designed
управляемым кодом!
for performance
Нет лишней сборки мусора
4+ года профилирования и
оптимизации
Эффективная работа на WP7
Оптимизированные
мат.библиотеки
API с переходом на нативный код
XNAFramework
Игры
Ваш код
Ваш контент
Компоненты
Starter Kits
Extended Framework
Application Model
Content Pipeline
Core Framework
Graphics
Audio
Networking
Gamer
Gamer Services*
Services
Input
Math
Storage
Платформа
DirectX
.NET CF
XNA для разработчика



Использует .NET Framework как основу
Игры пишутся на C#
 Generics
 LINQ
 И т.д.
Игры запускаются как управляемый код
 Безопасное исполнение кода
 Управление памятью
 Поддержка Windows, Xbox, Windows Phone 7
3D
Полноценная поддержка 3D на уровне
платформы
 Аппаратное ускорение для всего, что
нужно и можно ускорять аппаратно

29
Игровой цикл
Инициализация
Загрузка ресурсов
Обработка
событий
Вычисление
сцены
Определение
хода игры
Освобождение ресурсов
30
Обратная
связь
Игровой цикл
Initialize()
LoadContent()
Update()
Draw()
UnloadContent()
31
Игровой цикл
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
base.Draw(gameTime);
}
Пример Game Loop
Content Pipeline
Унифицированная платформа для хранения, обработки и извлечения
игровых ресурсов
 Набор “importers” для стандартных типов ресурсов

-

Разработчики могут создавать свои importers
Ресурсы хранятся в специальном репозитории
Типы
файлов
Название
импортера
Класс импортера
Выходной класс
.bmp, .dds,
.dib, .hdr, .jpg,
.pfm, .png,
.ppm, .tga.
XNA Texture
Importer
TextureImporter
TextureContent
.fx
XNA Effect
Importer
EffectImporter
EffectContent
.x
XNA X File
Importer
Ximporter
NodeContent
.fbx
XNA Autodesk
FBX Importer
FbxImporter
NodeContent
.xml
XNA XML
Importer
XmlImporter
Object
.xap
XNA XACT
Project Importer
-
-
5 эффектов
BasicEffect
DualTextureEffect
AlphaTestEffect
SkinnedEffect
EnvironmentMapEffect
Интеграция XNA и Silverlight
«Обычная» страница
2. SharedGraphicsDeviceManager
3. UIRenderElement
1.
Internet Explorer
HTML5
WebBrowser Control – наше все
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid x:Name="ContentPanel">
<phone:WebBrowser
IsScriptEnabled="True"
IsGeolocationEnabled="True"/>
</Grid>
</Grid>
3 базовые возможности



Загрузить HTML
Вызвать «хост»
Выполнить скрипт на странице
3 базовые возможности



Navigate / NavigateString
window.external.Notify
WebBrowser.InvokeScript
Фреймворки
PhoneGap
http://phonegap.com
PhoneGap
Plugins
Фреймворки
http://jquerymobile.com/
jQuery
jQuery Mobile + PhoneGap
http://wiki.phonegap.com/w/page/36868306/UI%20Development%20using%20jQueryMobile
IE9
модель исполнения
приложений
Жизненный цикл: состояния
Running
FAS (Fast Application Switching)
выгружено из памяти;
сохранены специальные
словари
Tumbstoned
Dormant
в памяти;
потоки остановлены,
ресурсы освобождены
Жизненный цикл: события и методы
Lunching Event
Closing Event
Application
Application
OnNavigateTo Method
Page
Runnin
g
OnNavigateFrom Method
Page
Activated Event
Deactivated Event
Application
Application
Tumbstoned
Dormant
Восстановление состояния


Dormant
 приложение в памяти
 потоки остановлены
 ресурсы освобождены
Tumbstoned
 приложение не в памяти
 сохранены специальные словари
 PhoneApplicationService.State
 PhoneApplicationPage.State
Демо
сохранение и
восстановление
состояния
многозадачность
Подходы к многозадачности

«Честная» и прожорливая
- Работаем, пока можем
- Система сложных правил выгрузки приложений
Desktop, Windows Mobile, Android

Мнимая и экономная
- Приложение выгружается при деактивации UI
- Ключевой фактор – сохранение состояния
Ранние iPhone, Windows Phone 7
Подходы к многозадачности
 Умная
- Похожа на мнимую
- Фоновые агенты
iPhone 4, Windows Phone codename “Mango”
- Возможны уведомления из агентов в приложения
Жизненный цикл: состояния
Running
FAS (Fast Application Switching)
выгружено из памяти;
сохранены специальные
словари
Tumbstoned
Dormant
в памяти;
потоки остановлены,
ресурсы освобождены
Fast Application Switching
Другие варианты?
Задача
Переключение задач пользователем
Реализация
Уведомления и сигналы
Background Notification
Загрузка фалов
Background Transfer
Уведомления о событиях
Push Notifications
Регулярные действия по расписанию;
toast/tile updates; data pre-caching; etc.
Periodic Background Agent
Проигрывание музыки
Background Audio Player
Синхронизация данных
Resource-Intensive Agent
GPS-tracking
Run under the lock screen
Fast App Switching
Background Notification Service
Reminders
Alarms
using Microsoft.Phone.Scheduler;
using
Microsoft.Phone.Scheduler;
private
void AddReminder(object sender, RoutedEventArgs e)
{
private
voidreminder
AddAlarm(object
sender, RoutedEventArgs e)
Reminder
= new Reminder("CompanyMeeting");
{ reminder.BeginTime = DateTime.Now.AddSeconds(15);
Alarm
alarm = new=Alarm("Long
Day");
reminder.Content
"Soccer Fields
by The Commons";
alarm.BeginTime
=
DateTime.Now.AddSeconds(15);
reminder.Title = "Microsoft Annual Company Product Fair 2009";
alarm.Content
= "It's been
a long day. Go to bed.";
reminder.RecurrenceType
= RecurrenceInterval.Yearly;
alarm.Title
= "Alarm"; = new Uri("/Reminder.xaml", UriKind.Relative);
reminder.NavigationUri
ScheduledActionService.Add(reminder);
}
ScheduledActionService.Add(alarm);
}
Демо
notifications
Background Transfer Service
using Microsoft.Phone.BackgroundTransfer;
My WP Book App
downloads
void GetCurrentProgress()
DownloadWithBTS(Uri sourceUri,
BtsProgressChanged(object
sender,
UriBackgroundTransferEventArgs
destinationPath)
e)
{
btr = new BackgroundTransferRequest(sourceUri, destinationUri);
DrawProgressBar(btr.BytesReceived);
} DrawProgressBar(e.Request.BytesReceived);
btr.TransferStatusChanged += BtsStatusChanged;
btr.TransferProgressChanged += BtsProgressChanged;
} BackgroundTransferService.Add(btr);
}
 Cheese & Win
completed
 Great Mysterie
WP Tips & Tric
My WP
Book App
ISO Store
Background
Transfer
Service
Great Mysteries
POST
<~3.0
MB
o
Cloud
<20
MB
GET
<2 GB
Демо
background file transfer
Background Audio – HTML5
<audio id="audio_tag"
controls="controls"
src="http://html5audio.com/Demo1.mp3"
onplay="StartPlayback()"
onended="NextTrack()"
</audio>
function NextTrack() {
musicPlayer = document.getElementById("audio_tag");
musicPlayer.src = 'http://html5audio.com/Demo2.mp3';
}
Browser
www.html5audio.
Cloud
Zune Service
++
Демо
html5 audio
Background Audio – По URL
current fav
0:09
0:12
0:11
0:10
Ode to WP
By MSFTMan
Player
= BackgroundAudioPlayer.Instance;
void PlayStateChanged(object
sender, EventArgs e)
player.PlayStateChanged
+= new eventHandler(PlayStateChanged);
{
switch (player.PlayerState)
AudioTrack
track = new AudioTrack(new Uri("/audiofile.mp3"),…);
{
case PlayState.FastForwarding:
player.Play();
// Move to next track
break;
}
}
My Music
App
++
ISO Store Buffer
Zune Service
Buffer
++
Cloud
Демо
background audio agent
Приложения + Агенты
Разработка
Приложение
ОС
myapp.dll
Единое
приложение
UX
Разные
процессы
Logic
Cloud
ISO Store
Logic
myappagent.dll
Системны
е сервисы
Жизненный цикл агента
Если системе необходимо
Агенту
пришло
завершить
агента:
OnCancel();
агент
должен
время
поработать
быстро завершить работу
Создан
Работае
т
stopping
Система
Приостановленные
Система
Агенту
вызывает
больше Отсутствие
приостанавливает
работы агенты могут быть
коднечего
агентаделать
NotifyComplete
агент, а возможно,
выгружены
и убивает
Нечего
делать
Неактивен
Приостановлен
Фатальная ошибка:
Abort()
Агенты могут бытьи «убийство»
«убиты» из-за нехватки
ресурсов
Ошибка!
«Убит»
Агенты: общие правила









Агенты: общие правила
On Idle агенты
Периодические агенты
 Выполнение
 Выполнение
 Внешнее питание, Wi-Fi или
 Каждые 30 минут
USB
 Длительность
 Длительность
 15 секунд
 10 минут
 Сценарии
 Синхронизация данных  Сценарии
 Загрузка данных
 Трекинг
 Синхронизация больших
местоположения
объемов
 …
 …
Демо
background agents
использование
возможностей
платформы
Интеграция
Камера
Сенсоры
Networking
Data
GPS
SQL CE
Захват видео
Accelerometer
Launchers
& Choosers
Bing Maps
Сокеты
E-mail
Compass
«Прямой»
доступ к
камере и
вспышке
Phone Contacts
Phone Number
Gyro
HTTP
Phone Calendar
Motion
Address
Chooser
Демо
возможности
платформы
launchers & choosers
Доступ к пользовательским данным


Chooser Tasks
 EmailAddressChooserTask
 PhoneNumberChooserTask
 AddressChooserTask
Microsoft.Phone.UserData для прямого доступа
 Contacts
 Appointments
Демо
прямой
доступ к контактам
и встречам
Расширения
App Connect
Search
Тайлы
Push Notifications
Music
Photos
Демо
возможности
платформы
live tiles
Push Notifications
 Raw
 Tile
 Toast
 Deep Toast
<wp:Notification
xmlns:wp="WPNotification">
 Связь уведомлений
и страниц приложения страницами
<wp:Toast>
<wp:Text1>World News Updates</wp:Text1>
<wp:Text2>Egypt braces for march in palace square</wp:Text2>
<wp:Param>/detailsPage.xaml?storyid=186435</wp:Param>
</wp:Toast>
</wp:Notification>
Демо
возможности
платформы
push notification
Локальное хранилище
Isolated Storage
Приложения хранят данные в Isolated Storage неструктурированные данные
 Обычные файлы и папки
 Настройки
App Data Folder
App
WP7 Isolated
Storage APIs
Управление
файлами
Настройки
Файлы
приложения
Демо
возможности
платформы
WebClient &
IsolatedStorage
Локальное хранилище
База данных
var query = from w in db.Wines
where w.Country == “USA"
select w.Name;
Custom Data
Context
.Call System.Linq.Queryable.Select( .Call System.Linq.Queryable.Where(
.Constant(Table(Wines)), '(.Lambda #Lambda1)), '(.Lambda #Lambda2))
.Lambda #Lambda1(db.Wines $w) { $w.Country == “USA" } .Lambda
#Lambda2(w.Country $w) { $w.Name }
Object
Identity
Materialization Management
select Name
from Wines
where Country = “USA”
App
Objects
Change
Tracking
Update
Processing
Core ADO.NET (System.Data)
SQLCE ADO.NET Provider (System.Data.SqlServerCe)
SQLCE DB
Демо
возможности
платформы
SQL CE
Геолокация

Отдаёт географические координаты, высоту, скорость и направление
 при инициализации можно указать стандартная или высокая точность
GeoCoordinateWatcher myGeoWatcher = new GeoCoordinateWatcher();
myGeoWatcher.MovementThreshold = 100.0f;
myGeoWatcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(…);
myGeoWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(…);
ThreadPool.QueueUserWorkItem(startMyGeoWotcher, myGeoWatcher);
....
static void startMyGeoWotcher(object GeoWatcher)
{
((GeoCoordinateWatcher)GeoWatcher).TryStart(false, TimeSpan.FromSeconds(60));
}
Акселерометр

Отдаёт вектор ускорения устройства в гравитационных единицах
 включает гравитацию
 сориентирован относительно устройства
Accelerometer myAccel = new Accelerometer();
myAccel.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(…);
myAccel.Start();
Гироскоп

Скорость вращения устройства вокруг каждой из осей
 в радианах/сек
Gyroscope myGyro = new Gyroscope();
myGyro.CurrentValueChanged += new
EventHandler<SensorReadingEventArgs<GyroscopeReading>>(…);
myGyro.Start();
Компас (магнитометр)
Точность измерения в градусах
 Направление на магнитный полюс (в градусах, против часовой стрелки)
 Направление на географический полюс (в градусах, против часовой стрелки)
 Данные магнитометра в виде вектора в микротеслах

Compass myCompass = new Compass();
myCompass.CurrentValueChanged += new
EventHandler<SensorReadingEventArgs<CompassReading>>(…);
myCompass.Start();
Демо
Использование
геолокационных
данных, акселерометра
и карты
Motion sensor



Motion
Sensor
Поддержка motion sensor






Camera API
PhotoCamera
Silverlight 4 WebCam API
Фото
Простая запись видео
Кнопки камеры
Можно использовать существующий код
Вспышка и фокус
Запись аудио и видео в файл
Демо
Использование
камеры
ресурсы
С чего начать

http://create.msdn.com



http://go.microsoft.com/?linkid=9772716
http://msdn.microsoft.com/ru-ru/windowsphone/
http://www.techdays.ru/?Tag=Windows Phone 7
 http://windowsteamblog.com/windows_phone/
 http://aka.ms/ruwp7dev - презентация и примеры
спасибо
The information herein is for informational purposes only and represents the current view of
Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to
changing market conditions, it should not be interpreted to be a commitment on the part of
Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the
date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO
THE INFORMATION IN THIS PRESENTATION.
© 2011 Microsoft Corporation.
All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
Скачать