Win401 caio garcez_windows_runtime

34
Conhecendo o Windows Runtime WIN401

Transcript of Win401 caio garcez_windows_runtime

Page 1: Win401 caio garcez_windows_runtime

Conhecendo o Windows Runtime

WIN401

Page 2: Win401 caio garcez_windows_runtime

Quem é o palestrante?Caio GarcezSenior Technical Evangelist@caio_garcez

Palestra

Page 3: Win401 caio garcez_windows_runtime

Desenvolvimento para Windows 10

Page 4: Win401 caio garcez_windows_runtime

Desenvolvimento para Windows 10

Windows 10operating system

Windows Bridges

Win32

desktop

Webhosted

JavaAndroid

Obj.CiOS

Universal Windows Platform

WWA

C++& CX

.Netlanguages

HTML/JS

DirectX XAML

C++.Netlanguages

MFCWFWPF

.Netruntime

.Net Core

Page 5: Win401 caio garcez_windows_runtime

Universal Windows PlatformOne Windows

Desktop

PC

2 in 1

Mobile

Tablet

Phablet

Phone

Xbox

Xbox

IoT

Band

IoT headless

Raspberry Pi

Home Automation

Surface Hub

Surface Hub

Holographic

HoloLens

Page 6: Win401 caio garcez_windows_runtime

• Plataforma unificada de desenvolvimento

• Único Application Package

• Código adaptativo

DesktopMobile

XboxIoT

Holographic Surface Hub

Universal Windows Platform

Core APIs

Universal Windows Platform

Page 7: Win401 caio garcez_windows_runtime

Windows Device Family Extension SDKsPara usar APIs específicas de famílias de dispositivos adicione referências aos Windows Device Family Extension SDKs

Page 8: Win401 caio garcez_windows_runtime

Código Adaptativo

// StatusBar is Mobile onlyif (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar")) { var ignore = Windows.UI.ViewManagement.StatusBar.GetForCurrentView().HideAsync(); }

Use as APIs Windows.Foundation.Metadata.ApiInformation para escrever código adaptativo em versões diferentes do app para famílias diferentes de dispositivos (ou versões diferentes da UWP)

Page 9: Win401 caio garcez_windows_runtime

Demo

Page 10: Win401 caio garcez_windows_runtime

Versionamento da UWP

Page 11: Win401 caio garcez_windows_runtime

http://windows.Microsoft.com

Platform.XML

Page 12: Win401 caio garcez_windows_runtime

Propriedades do ProjetoTarget version (TargetPlatformVersion)

• Define a versão do Universal Windows SDK alvejada pelo projeto

• Define a superfície de API para o app

• É inserida como a propriedade TargetDeviceFamily.MaxVersionTested no manifesto como parte do processo de build

<Dependencies> <TargetDeviceFamily

Name="Windows.Universal" MinVersion="10.0.10240.0"

MaxVersionTested="10.0.10240.0" /></Dependencies>

Page 13: Win401 caio garcez_windows_runtime

Min version (TargetPlatformMinVersion)

• Define a versão minima da Universal Windows Platform suportada pelo projeto

• É inserida como a propriedade TargetDeviceFamily.MinVersion no manifesto como parte do processo de build

<Dependencies> <TargetDeviceFamily

Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.10240.0"

/></Dependencies>

Propriedades do Projeto

Page 14: Win401 caio garcez_windows_runtime

.NET Native

Page 15: Win401 caio garcez_windows_runtime

Código-Fonte

Compilação .NET Clássica

Pré-compilação MSIL JIT Código

nativo

Page 16: Win401 caio garcez_windows_runtime

Código-Fonte

.NET Native

VS 2015

Código nativo

Page 17: Win401 caio garcez_windows_runtime

.NET NativeCompilação de última geração na nuvem Usado em todos os apps Windows 10Apps usam o otimizador padrão do C++Conforme a performance do otimizador melhora, o .Net native melhora tambémTempo médio de startup 50% menorConsumo de memória 14% menor

Page 18: Win401 caio garcez_windows_runtime

Conceitos da UWP

Page 19: Win401 caio garcez_windows_runtime

App Container

Sensores

Pastas

Rede

Outros

Page 20: Win401 caio garcez_windows_runtime

Demo

Page 21: Win401 caio garcez_windows_runtime

Projections

Page 22: Win401 caio garcez_windows_runtime

Component Object Model (COM)

ObjetoCOM

IUnknown

AddRefQueryInterfaceRelease

IUnknown

Page 23: Win401 caio garcez_windows_runtime

Windows Runtime

Objeto Windows Runtime

IInspectable

:IUnknownGetIidsGetRuntimeClassNameGetTrustLevel

IInspectable

Page 24: Win401 caio garcez_windows_runtime

Projections

Object

IInspectable

Windows Metadata

C++ App

Projection

CLR

C#/VB App

ProjectionHTML AppChakra

Projection

Page 25: Win401 caio garcez_windows_runtime

Criação de um objetoStart

App pede criação do objeto

Passa o nome para RoActivateInstance

Encontra DLL usando Catalog Carrega DLL

Chama DllGet-ActivationFactory

Objeto criado pelo código de

implementação

IInspectable retornado

Projection cria wrapper (usando

metadata)

Objeto é ligado ao wrapper

Wrapper retornado para App

End

App

Projection

WinRT Object Manager

WinRT Object

Page 26: Win401 caio garcez_windows_runtime

Políticas de energia e memória do Windows 10

Page 27: Win401 caio garcez_windows_runtime

Controle de memóriaUso de memória (aproximado)

Smartphone 512 MB

Tablet 1 GB Desktop 2 GB

Memória Física (MB) 512 1024 2048

Memória Virtual (Paging) 200 200 1600

Memória Total 712 1224 3648

SO, drivers, serviços 425 425 425

Service Agents (OEM/MO) 22 40 0

VOIP, áudio em background 66 80 80

VPN 10 10 20

Total reservado 523 555 525Memória disponível para apps e

tasks 189 669 3123

App em foreground 185 390 900Apps em backstack, background

tasks 4 279 2223

94% dos appstêm pico <150 MB

92% dos appstêm média <100 MB

Page 28: Win401 caio garcez_windows_runtime

Controle de CPU

Tipo de tarefa Limite de memória (MB)

Tempo de vida % CPU Bloqueado em Battery

SaveBackground task default 16 30 seg 10 Sim

Bluetooth de longa duração 16 ∞ 10 Sim

Extended execution 150 10 min 10 Sim

Áudio em background 25 ∞ 10 Não

Chamada VOIP 66 ∞ 70 Não

App moderna em foreground 185 ∞ 70 Não

Exemplo: Dispositivo com 512 MB

Page 29: Win401 caio garcez_windows_runtime

Prioridade de Tarefas (Tasks)Tipo de tarefa Prioridade

App em foreground 2VOIP 2Áudio em background 2VPN 2Background Transfer 2 ou 6*Bluetooth 3Task CachedFileUpdater/ShareDataPackage 3 ou 6*

Task Completion 4Task disparada por Geofencing 5Background tasks de fault 6App no backstack 7

Exemplo:dispositivo com 512 MB

(*) Se vinculada à app em foreground

Page 30: Win401 caio garcez_windows_runtime

Classe Windows.System.MemoryManagerMemoryManager.AppMemoryUsageIncreased += OnAppMemoryUsageIncreased;MemoryManager.AppMemoryUsageDecreased += OnAppMemoryUsageDecreased;

ulong usageLimit = MemoryManager.AppMemoryUsageLimit;ulong usage = MemoryManager.AppMemoryUsage;ulong headroom = usageLimit - usage;

AppMemoryReport appReport = MemoryManager.GetAppMemoryReport();ulong privateCommit = appReport.PrivateCommitUsage;ulong peakPrivate = appReport.PeakPrivateCommitUsage;ulong totalCommit = appReport.TotalCommitUsage;ulong commitLimit = appReport.TotalCommitLimit;

ProcessMemoryReport processReport = MemoryManager.GetProcessMemoryReport();ulong privateSet = processReport.PrivateWorkingSetUsage;ulong totalSet = processReport.TotalWorkingSetUsage;

Page 31: Win401 caio garcez_windows_runtime

Classe Windows.System.Power.BackgroundEnergyManager

BackgroundEnergyManager.RecentEnergyUsageIncreased += OnRecentEnergyUsageIncreased;BackgroundEnergyManager.RecentEnergyUsageReturnedToLow += OnRecentEnergyUsageReturnedToLow;

uint usage = BackgroundEnergyManager.RecentEnergyUsage;

uint usageLevel = BackgroundEnergyManager.RecentEnergyUsageLevel;if (usageLevel == BackgroundEnergyManager.NearTerminationUsageLevel) ;// Prepare-se para ser terminadoelse if (usageLevel == BackgroundEnergyManager.ExcessiveUsageLevel) ;// Diminua o consume urgentementeelse if (usageLevel == BackgroundEnergyManager.MaxAcceptableUsageLevel) ;// Na “Wall of Shame”else if (usageLevel == BackgroundEnergyManager.NearMaxAcceptableUsageLevel) ;// Se aproximando da “Wall of Shame”else if (usageLevel == BackgroundEnergyManager.LowUsageLevel) ;// Bom cidadão

Page 32: Win401 caio garcez_windows_runtime

Q&A

Visite o espaço Ask the Experts, próximo dos expositores

Page 33: Win401 caio garcez_windows_runtime

Continue sua capacitação

Microsoft Virtual Academy

http://aka.ms/ch9 http://aka.ms/mva

Page 34: Win401 caio garcez_windows_runtime

Evento de encerramento do Microsoft Insights Week 

com Satya Nadella, CEO da Microsoft.Dia 29 de setembro

AMCHAM - Rua da Paz 1431Chácara Santo Antônio - SP

Para se inscrever: http://aka.ms/satyabr