Milan Zeleny: Evolutionary Economics - presentation from conferece CASA, E-Leader, Prague 2015.
Ciclo de Vida de Aplicativos Windows - The Developers Conferece 2014
-
Upload
ricardo-dorta -
Category
Technology
-
view
85 -
download
0
description
Transcript of 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
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
Agenda…
Ciclo de vida de um Windows XAML AppLaunchSuspendResumeTermination
Salvando e Restaurando um estado
http://ricardodorta.net.br@dortaway
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”
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.
Usuário iniciando o aplicativo
Launch
NotRunning Runninghttp://ricardodorta.net.br@dortaway
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.
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
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.
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
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
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
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”
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
Termination
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.
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
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
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
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
CONTACTS
Jim Jones
12:38
CONTACTS
Add PhoneMobile Phone
Phone type
Phone number0888 777
StateNavigate(Page2, ID
param)Navigate(Page3, ID
param)
Data
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
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