Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

25
Ricardo Dorta – C#MVP Ciclo de vida de um Windows Phone Store App WinRT Apps 24/04/2014 Construindo Windows Phone Store Apps usando C# e XAML

description

Slides da palestra Ciclo de Vida de Aplicativos Windows que ministrei no The Developers Conferece 2014

Transcript of Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Page 1: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Ricardo Dorta – C#MVP

Ciclo de vida de um Windows Phone Store App

WinRT Apps

24/04/2014

Construindo Windows Phone Store Apps usando C# e XAML

Page 2: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Our objective is to provide innovation to society.We work to shape trends and ideas using technology.

How do we think• Software Development Engineer - Apps @ BR Soluções Integradas• Microsoft Most Valuable Professional (MVP) C#• Microsoft Certified Professional• Microsoft Certified Application Developer• Microsoft Certified Solution Developer• Microsoft Certified Technology Specialist - Silverlight• Ex Moderador do Fórum de Silverlight da MSDN Brasil• São Paulino• Viciado em games• Nerd e Bonitão

Ricardo Dortahttp://ricardodorta.net.br@dortaway

Page 3: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Agenda…

Ciclo de vida de um Windows XAML AppLaunchSuspendResumeTermination

Salvando e Restaurando um estado

http://ricardodorta.net.br@dortaway

Page 4: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Ciclo de vida?recursos de um telefone são reduzidos (bateria principalmente)

o SO roda um aplicativo externo por vez

os outros apps ficam em um estado “suspended” ou “terminated”

o SO possui mecanismos controlados para códigos que rodam em “background”

o SO possui muitos mecanismos para que uma app pareça “ligada”

Andy Wigley
'paused' or 'suspended'
Mike Taulty
Changed.
Kraig Brockschmidt
The word "tombstoned" is used elsewhere (I think in Session 1)--be sure to make the terms consistent
Nick Randolph
If "tombstoned" isn't the same as it was for wp8, then I'd discourage its use
Page 5: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Ciclo de vida?

o Ciclo de Vida é muito parecido com o ciclo de vida de um aplicativo do Windows 8.1

é diferente do ciclo de vida do Windows Phone 8.0

os conceitos são familiares para qualquer desenvolvedor mobile

as diferenças ocorrem devido a natureza do hardware do telefone e a necessidade de manter a compatibilidade com aplicativos do WP8.0 e do WP7.x.

Page 6: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

launch, suspend, resume

http://ricardodorta.net.br@dortaway

Page 7: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Usuário iniciando o aplicativo

Launch

NotRunning Runninghttp://ricardodorta.net.br@dortaway

Page 8: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Application.OnLaunched override

sealed partial class App : Application { /// <summary> /// Invoked when the application is launched normally by the end user. /// </summary> /// <param name="e">Details about the launch request and process.</param> protected override async void OnLaunched(LaunchActivatedEventArgs e) { // How did the app exit the last time it was run (if at all) ApplicationExecutionState previousState = e.PreviousExecutionState;

// What kind of launch is this? ActivationKind activationKind = e.Kind;

// ...

NotRunningRunning

SuspendedTerminated

ClosedByUser

LaunchFile

ProtocolVoiceCommand

Etc.

Page 9: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Usuário navegando para for a do seu aplicativo

Aplicativo entra em modo “suspended”

Todo o código do aplicativo para de rodar

Nenhum timer executa o “tick”

Nenhum evento é disparado

O processo ainda está ativo na memória

O código tem uma “chance” de ser executado(próximo slide)

Leaves App

http://ricardodorta.net.br@dortaway

Page 10: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Application.Suspending event

sealed partial class App : Application { public App() { this.InitializeComponent(); this.Suspending += OnSuspending; } private async void OnSuspending(object sender, SuspendingEventArgs e) { // Ask for a deferral if you need to do async work var deferral = e.SuspendingOperation.GetDeferral();

// TODO: whatever async work you need to do when suspending

deferral.Complete(); // Then mark the deferral complete }

Este código tem um limite de tempo para ser executado. Realizar o menor trabalho possível aqui melhora e experiência do seu usuário.

NB: Apenas peça o “deferral” se você estiver realizando um trabalho assíncrono. O “deferral” não te dá mais tempo para suspender o aplicativo.

Page 11: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Usuário retornando ao seu aplicativo

O mesmo aplicativo vai para o estado “resumed”

Mesmo processo, mesmos valores de memória, portanto os valores de suas varíaveis estão intactas!

Todo o seu código volta a rodar

Seu código tem uma chance de responder...

Launch Back Switcher

Page 12: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Application.Resuming event

sealed partial class App : Application { public App() { this.InitializeComponent(); this.Suspending += OnSuspending; this.Resuming += OnResuming; }

private void OnResuming(object sender, object e) { // TODO: whatever you need to do to resume your app }

http://ricardodorta.net.br@dortaway

Page 13: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

O debugger (não)é seu amigo!

“By design” – seu código não vai entrar em “suspend/resume” quando rodando com o debugger O debugger tem um recurso específico para simular o “suspend/resume” http://ricardodorta.net.br

@dortaway

Page 14: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

O que fazer no “resuming”?

Verificar dados ou condições externas necessárias para a continuidade do seu aplicativoPossivelmente trabalhar o tempo que o usuário passou longe do aplicativoExemplos (retirados do site http://bit.ly/w8Resuming):atualizar dados de uma fonte onlineverificar o status de conectividade do aplicativo – online ou offline?atualizar dados de sensors como geolocalização e bússolatentar novamente uma chamada de rede que pode ter falhado enquanto o aplicativo estava executando o “suspending”atualizar o layout – o usuário pode ter alterado a orientação da visualização (retrato/paisagem)verificar novos dados obtidos por um “background task” ou pelo “system roaming”

Page 15: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Os aplicativos podem ser fechados pelo usuário

Close

Running

ClosedByUser

Nota do palestrante: Apenas apertar o botão “Back” não fecha o aplicativo

Page 16: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Demo

Ricardo Dorta – C# MVP

http://ricardodorta.net.br@dortaway

Page 17: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Termination

Page 18: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

O SO pode finalizar seu aplicativo

Usuário abre outro aplicativo

SO com pouca memória disponível

SO finaliza sua app

Terminated

System has a priority system for determining which app to terminate.

Page 19: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

O SO não avisa o aplicativoque vai finalizar – nenhuma notificaçãoO aplicativo é removido da lista de aplicativos abertos

O SO pode finalizar seu aplicativo

Page 20: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Usuário ‘retornando’ ao aplicativo finalizado

O usuário não vai saber que o seu aplicativo foi finalizado

Normalmente ele vai esperar que a experiência de uso do seu aplicativo continue de onde ele parou

O trabalho do desenvolvedor é manter a “ilusão” de que o aplicativo continou rodando, mes que ele não estivesse

Page 21: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Usuário ‘retornando’ ao aplicativo finalizado

O usuário não pode perder dados e deve continuar a receber as últimas informações sem quebras

O aplicativo deve restaurar dados de sessão incluindo navegação de páginas, posicionamento e parametros da página e conteúdo de formulários

Cada aplicativo define o que são esses dados de maneira diferente

Nick Randolph
What concerns me is the fact that the developer is going to end up being responsible for maintaining a back stack in order to preserve navigation history if the app is terminated. Surely that can't be the expectation?
Page 22: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Dados transitórios VS dados persistentes

Diretório App Data Local(ou diretório para dados roaming)

12:38

12:38

Jim JonesTel: 0111 222 333

Bob BrownTel: 0444 555 666

Arthur AbbottTel: 0777 888 999

CONTACTS

all 12:38

12:38

Work Tel: 0111 222 333

HomeTel: 0444 555 666

[email protected]

CONTACTS

Jim Jones

12:38

CONTACTS

Add PhoneMobile Phone

Phone type

Phone number0888 777

StateNavigate(Page2, ID

param)Navigate(Page3, ID

param)

Data

Page 23: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

A classe Frame possui os métodos [Get/Set]NavigationState para tratar o histórico de navegação como uma StringA classe SuspensionManager ajuda a armazenar os estados global e de um Frame em um arquivoA classe NavigationHelper amarra sua Page ao SuspensionManager através de eventos de página simples

Obtendo ajuda do framework

Page 24: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Demo

Ricardo Dorta – C# MVP

http://ricardodorta.net.br@dortaway

Page 25: Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014

Tópicos relacionadosNotification mechanismsSession 10: Tiles, badges, Toasts and Action Center

Additional activation scenarios – e.g. protocol activationSession 14: Sharing Files and Data

Background workingSession 11: Background Tasks

Application Lifecycle in Silverlight AppsBuilding Apps for Windows Phone 8 Jump Start - Session 5: Windows Phone 8 Application Lifecyclehttp://aka.ms/Tsatr4