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

249 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
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
249
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Apresentação Pessoal
  • Explicar agenda, o que vamos apresentar
  • - Explicar como é formado um Tile
    Explicar os 3 tipos de tiles
    Basic State
    Semi-Live State
    Live State
  • Basic Templates
    Templates prontos, com posições dos elementos fixas
  • Explicar que se o template que existe funciona para ele, é melhor usar.
    Os templates do Windows 8.1 ainda funcionam no 10 sem nenhum problema
  • Explicar o que é o Secondary Live Tile
    Explicar quando deve usar esse recurso
  • - Explicar os tipos de atualizações que são possíveis
  • Mostrar como é o código incial de cada tamanho de tamplate disponível
    Falar que o Tile Large é exclusivo Desktop
  • Mostrar exemplos de tiles
    Mostrar como é simples e fácil deixar um Tile customizado de acordo com as necessidades do aplicativo
  • Pode ser causado por falta de recursos do SO.
  • Diego: Qual a importancia do Deferral? E se eu nao usar?
    Ao executar uma tarefa assíncrona no Background Task, o SO pode considerar a task como finalizada e teminá-la. Usar deferral garante que a Task não será finalizada pelo SO.
    O deferral.Complete() sinaliza o SO que a background task terminou o que tinha para fazer.
  • Ao executar uma tarefa assíncrona no Background Task, o SO pode considerar a task como finalizada e teminá-la. Usar deferral garante que a Task não será finalizada pelo SO.
    O deferral.Complete() sinaliza o SO que a background task terminou o que tinha para fazer.
  • O usuário pode prevenir a execução de um background task (app or system level). Mas ele não pode impedir que a aplicação faça a requisição de acesso. Não é esse o caso aqui.
    O usuário pode negar a execução de background tasks, por exemplo, devido a problemas com a aplicação ou por causa do estado atual do SO.

  • Para registrar o Background Task usamos o método: Task.register()
    Para tanto definimos a Task a partir do BackgroundTaskBuilder. Neste definimos as seguintes informações:
    - Name: deve ser único. Podemos usar o recurso novo do C#5 que é o nameof. O nome será depois usado para acompanhar a Background Task no event viewer.
    - CancelOnConditionLoss: Nós podemos executar a task mesmo quando perdermos a condição para executar a background task.
    - EntryPoint: O nome complete do background task.
  • E importante especificar o type correto para a tarefa. Voce pode especificar mais de um element Task dentro do element BackgroundTasks, cada um especificando os tipos que devem corresponder com os triggers da task.
  • Diego: Questionar se as triggers do 8.1 ainda funcionam no 10
  • Diego: O usuario ficou 15 min sem estar logado, acionou o trigger, passou mais 15 min e ele nao logou. Quando logar vai ser enviado quantas vezes?
  • Diego: Sempre vou ter 25 segundos?
  • No Windows desktop podemos ter até 8 background tasks executando simultâneamente.
    Isso pode ser diferente no Windows Mobile.
  • Em Quite Hours ainda estão disponíveis Toast VOIP e Toast Alarm
  • Em Quite Hours ainda estão disponíveis Toast VOIP e Toast Alarm
  • 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

    ×