Globalcode – Open4education
Trilha – Universal Windows
Diego Castro | João Ronaldo
Evangelistas Técnicos
www.talkitbr.com
...
Globalcode – Open4education
Diego Castro
/dfdcastro
www.talkitbr.com
/talkitbr
João Ronaldo Cunha
/joaoronaldo.cunha
www.t...
Globalcode – Open4education
Agenda
Live Tiles
Tiles
Adaptive Tile
Demo
Background Execution
Criando Background Tasks
Demo
...
Globalcode – Open4education
Tiles
Globalcode – Open4education
Live State
Plate
App Icon
Short Name
Badge
Content
Plate
Short Name
Badge
App Icon
Content
Ana...
Globalcode – Open4education
Basic Templates
Globalcode – Open4education
Templates Legados
O template que você precisa já
existe?
Templates anteriores ainda
são válido...
Globalcode – Open4education
Secondary Tile
Deep-link no seu app
Separação de conteúdo
Conteúdo relevante para o
usuário
Globalcode – Open4education
Atualizando
Programado
Configurar com “ScheduledTileNotification”
Periódico
Pull URL 30m / 60m...
Globalcode – Open4education
Adaptive Tile
Globalcode – Open4education
XML
<tile>
<visual>
<binding template="TileSmall">
<text>Small</text>
</binding>
<binding temp...
Globalcode – Open4education
O que podemos fazer
Globalcode – Open4education
Demo
Globalcode – Open4education
Background Tasks
Globalcode – Open4education
O que é
Tarefa que executa em plano de fundo
(background)
Permite executar código da aplicação...
Globalcode – Open4education
Criando Background Task
Implementar interface IBackgroundTask
Analisar custo
O SO está sobreca...
Globalcode – Open4education
Criando Background Task
public async void Run(IBackgroundTaskInstance taskInstance)
{
var cost...
Globalcode – Open4education
Criando Background Task
public async void Run(IBackgroundTaskInstance taskInstance)
{
var cost...
Globalcode – Open4education
Criando Background Task
public async void Run(IBackgroundTaskInstance taskInstance)
{
var cost...
Globalcode – Open4education
Criando Background Task
public async void Run(IBackgroundTaskInstance taskInstance)
{
var cost...
Globalcode – Open4education
Requisitando Acesso
A aplicação precisa requisitar acesso para rodar
Background Tasks
O Window...
Globalcode – Open4education
Registrando a Task
Registramos a Background Task usando o
BackgroundExecutionManager.
Neste mo...
Globalcode – Open4education
Especificando no manifest
No manifest da aplicação registramos uma
extensão da aplicação defin...
Globalcode – Open4education
Demo
Globalcode – Open4education
Executando a Task
A execução de um Background Task é
determinada:
Por trigger.
Por zero ou mai...
Globalcode – Open4education
Windows8.1
SystemTrigger
TimeTrigger
MaintenanceTrigger
DeviceUseTrigger
DeviceServicingTrigge...
Globalcode – Open4education
Executando a Task
Triggers -Time Trigger
Time Trigger deve ter ao menos 15 minutos para
ser re...
Globalcode – Open4education
Executando a Task
Condições do Sistema
User Present
User Not Present
Internet Available
Intern...
Globalcode – Open4education
Tempo Execução da Task
Cancel
(5 seconds)
Memory
Run
(25 seconds)
Default tasks
Mínimo 25 segu...
Globalcode – Open4education
Debug e Log
Visual Studio pode disparar background tasks.
Log é registrado em:
Application & S...
Globalcode – Open4education
Restrições
Cota de CPU = Não
Processamento CPU = Sim (10%)
Tempo mínimo execução = Sim (25s + ...
Globalcode – Open4education
Restrições
No Windows 10 uma aplicação pode ter muitas
background tasks.
Seja consciente! Exec...
Globalcode – Open4education
Restrições
Quiet hours
Somente quando não estiver sendo usado pelo usuário.
Não são emitidas n...
Globalcode – Open4education
Restrições
Economia de Bateria
Usuários definem as aplicações que podem executar em
Background...
Globalcode – Open4education
Outros Recursos
In-process Task
Processo padrão
Background task
mantido num processo
a parte
I...
Globalcode – Open4education
Outros Recursos
Application Service
Client App A
Client App B
Background
Task
App with App
Ser...
Globalcode – Open4education
Dúvidas?
www.talkitbr.com
Globalcode – Open4education
Contatos
/dfdcastro
www.talkitbr.com
/joaoronaldo.cunha
/talkitbr/TDC2015
/talkitbr
Globalcode – Open4education
Obrigado!
www.talkitbr.com
Próximos SlideShares
Carregando em…5
×

Live Tiles e Background Executions - TDC SP 2015

279 visualizações

Publicada em

Palestra sobre Live Tiles e Background executions em Windows Universal Platform. Ministrada pelos evangelistas Diego Castro e João Ronaldo Cunha no The Developer Conference (TDC) São Paulo 2015 na trilhe de Universal Windows.

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Live Tiles e Background Executions - TDC SP 2015

  1. 1. Globalcode – Open4education Trilha – Universal Windows Diego Castro | João Ronaldo Evangelistas Técnicos www.talkitbr.com Live Tiles e Background Execution
  2. 2. Globalcode – Open4education Diego Castro /dfdcastro www.talkitbr.com /talkitbr João Ronaldo Cunha /joaoronaldo.cunha www.talkitbr.com /talkitbr /joaocunhaeld
  3. 3. Globalcode – Open4education Agenda Live Tiles Tiles Adaptive Tile Demo Background Execution Criando Background Tasks Demo Perguntas e Respostas
  4. 4. Globalcode – Open4education Tiles
  5. 5. Globalcode – Open4education Live State Plate App Icon Short Name Badge Content Plate Short Name Badge App Icon Content Anatomia Semi-Live State Plate App Logo Short Name Badge Plate App Logo Short Name Badge Basic State Plate App Logo Short Name Plate App Logo Short Name
  6. 6. Globalcode – Open4education Basic Templates
  7. 7. Globalcode – Open4education Templates Legados O template que você precisa já existe? Templates anteriores ainda são válidos!
  8. 8. Globalcode – Open4education Secondary Tile Deep-link no seu app Separação de conteúdo Conteúdo relevante para o usuário
  9. 9. Globalcode – Open4education Atualizando Programado Configurar com “ScheduledTileNotification” Periódico Pull URL 30m / 60m / 6h / 12h / 24h Local Update em foreground/background Push Push services
  10. 10. Globalcode – Open4education Adaptive Tile
  11. 11. Globalcode – Open4education XML <tile> <visual> <binding template="TileSmall"> <text>Small</text> </binding> <binding template="TileMedium"> <text>Medium</text> </binding> <binding template="TileWide"> <text>Wide</text> </binding> <binding template="TileLarge"> <text>Large</text> </binding> </visual> </tile>
  12. 12. Globalcode – Open4education O que podemos fazer
  13. 13. Globalcode – Open4education Demo
  14. 14. Globalcode – Open4education Background Tasks
  15. 15. Globalcode – Open4education O que é Tarefa que executa em plano de fundo (background) Permite executar código da aplicação mesmo quando ela não estiver em execução. Usado para: Atualização de Live Tiles; Notificações; Atualização de banco de dados; Entre outros.
  16. 16. Globalcode – Open4education Criando Background Task Implementar interface IBackgroundTask Analisar custo O SO está sobrecarregado? Vale a pena executar o background task num determinado momento? Tratar o cancelamento da task Toda background task pode ser cancelada Executar em deferral Background task não pode executar de forma assíncrona. Indicar progresso
  17. 17. Globalcode – Open4education Criando Background Task public async void Run(IBackgroundTaskInstance taskInstance) { var cost = BackgroundWorkCost.CurrentBackgroundWorkCost; if (cost == BackgroundWorkCostValue.High) { return; } var cancel = new System.Threading.CancellationTokenSource(); taskInstance.Canceled += (s, e) => { cancel.Cancel(); cancel.Dispose(); }; var deferral = taskInstance.GetDeferral(); try { await Task.Run(async () => { for (int i = 0; i < 10; i++) { taskInstance.Progress = (uint)i * 10; await Task.Delay(2000); } }, cancel.Token); } finally { deferral.Complete(); } } Analisar Custo
  18. 18. Globalcode – Open4education Criando Background Task public async void Run(IBackgroundTaskInstance taskInstance) { var cost = BackgroundWorkCost.CurrentBackgroundWorkCost; if (cost == BackgroundWorkCostValue.High) { return; } var cancel = new System.Threading.CancellationTokenSource(); taskInstance.Canceled += (s, e) => { cancel.Cancel(); cancel.Dispose(); }; var deferral = taskInstance.GetDeferral(); try { await Task.Run(async () => { for (int i = 0; i < 10; i++) { taskInstance.Progress = (uint)i * 10; await Task.Delay(2000); } }, cancel.Token); } finally { deferral.Complete(); } } Tratar cancelamento
  19. 19. Globalcode – Open4education Criando Background Task public async void Run(IBackgroundTaskInstance taskInstance) { var cost = BackgroundWorkCost.CurrentBackgroundWorkCost; if (cost == BackgroundWorkCostValue.High) { return; } var cancel = new System.Threading.CancellationTokenSource(); taskInstance.Canceled += (s, e) => { cancel.Cancel(); cancel.Dispose(); }; var deferral = taskInstance.GetDeferral(); try { await Task.Run(async () => { for (int i = 0; i < 10; i++) { taskInstance.Progress = (uint)i * 10; await Task.Delay(2000); } }, cancel.Token); } finally { deferral.Complete(); } } Executar em deferral
  20. 20. Globalcode – Open4education Criando Background Task public async void Run(IBackgroundTaskInstance taskInstance) { var cost = BackgroundWorkCost.CurrentBackgroundWorkCost; if (cost == BackgroundWorkCostValue.High) { return; } var cancel = new System.Threading.CancellationTokenSource(); taskInstance.Canceled += (s, e) => { cancel.Cancel(); cancel.Dispose(); }; var deferral = taskInstance.GetDeferral(); try { await Task.Run(async () => { for (int i = 0; i < 10; i++) { taskInstance.Progress = (uint)i * 10; await Task.Delay(2000); } }, cancel.Token); } finally { deferral.Complete(); } } Indicar progresso
  21. 21. Globalcode – Open4education Requisitando Acesso A aplicação precisa requisitar acesso para rodar Background Tasks O Windows 10 não exibe mais a caixa de diálogo, assim como já era no Windows Phone 8.1. BackgroundAccessStatus allowed = await BackgroundExecutionManager.RequestAccessAsync(); switch (allowed) { // allowed case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity: break; case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity: break; // denied case BackgroundAccessStatus.Denied: break; // cancelled case BackgroundAccessStatus.Unspecified: break; }
  22. 22. Globalcode – Open4education Registrando a Task Registramos a Background Task usando o BackgroundExecutionManager. Neste momento definimos o trigger e as condições para rodar a background task. var task = new BackgroundTaskBuilder { Name = nameof(MyBackgroundTask), CancelOnConditionLoss = false, TaskEntryPoint = typeof(MyBackgroundTask).ToString(), }; task.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false)); task.AddCondition(new SystemCondition(SystemConditionType.userPresent)); task.Register();
  23. 23. Globalcode – Open4education Especificando no manifest No manifest da aplicação registramos uma extensão da aplicação definindo nossa Task. Atenção para os tipos definidos para o Background Task. <Applications> <Application Id="App" <Extensions> <Extension Category="windows.backgroundTasks" EntryPoint="SampleApp.Tasks.MyBackgroundTask"> <BackgroundTasks> <Task Type="systemEvent" /> <!-- <Task Type="timer" /> --> </BackgroundTasks> </Extension> </Extensions> </Application> </Applications>
  24. 24. Globalcode – Open4education Demo
  25. 25. Globalcode – Open4education Executando a Task A execução de um Background Task é determinada: Por trigger. Por zero ou mais condições. Posso registrar uma task com diferentes triggers e diferentes condições.
  26. 26. Globalcode – Open4education Windows8.1 SystemTrigger TimeTrigger MaintenanceTrigger DeviceUseTrigger DeviceServicingTrigger PushNotificationTrigger Phone8.1 CachedFileUpdaterTrigger DeviceConnectionChangeTrigger GattCharacteristicNotificationTrigger RfcommConnectionTrigger LocationTrigger Windows10 AppointmentStoreNotificationTrigger ContactStoreNotificationTrigger EmailStoreNotificationTrigger BluetoothLEAdvertisementWatcherTrigger BluetoothLEAdvertisementPublisherTrigger DeviceWatcherTrigger ActivitySensorTrigger SensorDataThresholdTrigger ToastNotificationHistoryChangedTrigger ToastNotificationActionTrigger ApplicationTrigger MediaProcessingTrigger SocketActivityTrigger Executando a Task Triggers
  27. 27. Globalcode – Open4education Executando a Task Triggers -Time Trigger Time Trigger deve ter ao menos 15 minutos para ser recorrente. Definir trigger menor faz com que ele seja executado somente uma vez. // ... task.SetTrigger(new TimeTrigger(15, false)); task.AddCondition(new SystemCondition(SystemConditionType.UserPresent)); task.Register(); // ...
  28. 28. Globalcode – Open4education Executando a Task Condições do Sistema User Present User Not Present Internet Available Internet Not Available Session Connected Session Disconnected Free Network Available Se a rede não tem taxa para tráfego de dados Work Cost Not High
  29. 29. Globalcode – Open4education Tempo Execução da Task Cancel (5 seconds) Memory Run (25 seconds) Default tasks Mínimo 25 segundos de execução 5 segundos após receber sinal de cancelamento. Memory Run (no end) End (no warning, for now) Long-running tasks Inclui triggers: Application, Maintenance e DeviceUse
  30. 30. Globalcode – Open4education Debug e Log Visual Studio pode disparar background tasks. Log é registrado em: Application & Services Logs > Microsoft > BackgroundTaskInfrastructure
  31. 31. Globalcode – Open4education Restrições Cota de CPU = Não Processamento CPU = Sim (10%) Tempo mínimo execução = Sim (25s + 5s) Exceto para long-running tasks Cota de memória = Sim Varia de acordo com o dispositivo (min 16MB) Cota de tráfego de rede = Sim Varia de acordo com o dispositivo
  32. 32. Globalcode – Open4education Restrições No Windows 10 uma aplicação pode ter muitas background tasks. Seja consciente! Executar várias background tasks pode prejudicar a experiência do usuário.
  33. 33. Globalcode – Open4education Restrições Quiet hours Somente quando não estiver sendo usado pelo usuário. Não são emitidas notificações Nenhuma background task é executada Tarefas em andamento são canceladas
  34. 34. Globalcode – Open4education Restrições Economia de Bateria Usuários definem as aplicações que podem executar em Background Número de tasks controlado Identifica tasks abusivas
  35. 35. Globalcode – Open4education Outros Recursos In-process Task Processo padrão Background task mantido num processo a parte In-process Maior comunicação entre app e task Memória compartilhada app.exe Core Application Background Task task.exe App Container app.exe Core Application Background Task task.exe App Container
  36. 36. Globalcode – Open4education Outros Recursos Application Service Client App A Client App B Background Task App with App Service
  37. 37. Globalcode – Open4education Dúvidas? www.talkitbr.com
  38. 38. Globalcode – Open4education Contatos /dfdcastro www.talkitbr.com /joaoronaldo.cunha /talkitbr/TDC2015 /talkitbr
  39. 39. Globalcode – Open4education Obrigado! www.talkitbr.com

×