Tratar a pré-inicialização do aplicativo
Saiba como lidar com a pré-inicialização do aplicativo substituindo o método OnLaunched e chamando CoreApplication.EnablePrelaunch.
Introdução
Quando os recursos do sistema disponíveis permitem, o desempenho de inicialização de aplicativos UWP em dispositivos da família de dispositivos desktop é aprimorado iniciando proativamente os aplicativos usados com mais frequência do usuário em segundo plano. Um aplicativo pré-lançado é colocado no estado suspenso pouco depois de ser iniciado. Em seguida, quando o usuário invoca o aplicativo, o aplicativo é retomado trazendo-o do estado suspenso para o estado em execução, o que é mais rápido do que iniciar o aplicativo frio. A experiência do usuário é que o aplicativo simplesmente iniciou muito rapidamente.
Antes do Windows 10, os aplicativos não aproveitam automaticamente a pré-inicialização. No Windows 10, versão 1511, todos os aplicativos da Plataforma Universal do Windows (UWP) eram candidatos para serem pré-inicializados. No Windows 10, versão 1607, você deve aceitar o comportamento de pré-inicialização chamando CoreApplication.EnablePrelaunch e passando true
. Um bom lugar para colocar essa chamada é dentro de OnLaunched, perto do local em que a if (e.PrelaunchActivated == false)
marcar é feita.
A pré-inicialização do aplicativo depende de recursos do sistema. Se o sistema estiver enfrentando pressão de recursos, os aplicativos não serão pré-inicializados.
Alguns tipos de aplicativos podem precisar alterar o comportamento de inicialização para funcionar bem com a pré-inicialização. Por exemplo, um aplicativo que reproduz música quando é iniciado; um jogo que pressupõe que o usuário está presente e exibe visuais elaborados quando o aplicativo é iniciado; um aplicativo de mensagens que altera a visibilidade online do usuário durante a inicialização— todos eles podem identificar quando o aplicativo foi pré-inicializado e podem alterar seu comportamento de inicialização, conforme descrito nas seções abaixo.
Os modelos padrão para projetos XAML (C#, VB, C++) acomodam a pré-inicialização.
Pré-lançamento e ciclo de vida do aplicativo
Depois que um aplicativo é pré-inicializado, ele entra no estado suspenso. (Consulte Manipular a suspensão de aplicativo.)
Detectar e manipular a pré-inicialização
Os aplicativos recebem o sinalizador LaunchActivatedEventArgs.PrelaunchActivated durante a ativação. Use esse sinalizador para executar o código que só deve ser executado quando o usuário iniciar explicitamente o aplicativo, conforme mostrado na modificação a seguir em Application.OnLaunched.
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
// CoreApplication.EnablePrelaunch was introduced in Windows 10 version 1607
bool canEnablePrelaunch = Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.ApplicationModel.Core.CoreApplication", "EnablePrelaunch");
// NOTE: Only enable this code if you are targeting a version of Windows 10 prior to version 1607,
// and you want to opt out of prelaunch.
// In Windows 10 version 1511, all UWP apps were candidates for prelaunch.
// Starting in Windows 10 version 1607, the app must opt in to be prelaunched.
//if ( !canEnablePrelaunch && e.PrelaunchActivated == true)
//{
// return;
//}
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (e.PrelaunchActivated == false)
{
// On Windows 10 version 1607 or later, this code signals that this app wants to participate in prelaunch
if (canEnablePrelaunch)
{
TryEnablePrelaunch();
}
// TODO: This is not a prelaunch activation. Perform operations which
// assume that the user explicitly launched the app such as updating
// the online presence of the user on a social network, updating a
// what's new feed, etc.
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
/// <summary>
/// This method should be called only when the caller
/// determines that we're running on a system that
/// supports CoreApplication.EnablePrelaunch.
/// </summary>
private void TryEnablePrelaunch()
{
Windows.ApplicationModel.Core.CoreApplication.EnablePrelaunch(true);
}
Importante
O método TryEnablePrelaunch no exemplo de código acima chama CoreApplication.EnablePrelaunch. E TryEnablePrelaunch é chamado somente quando o aplicativo está em execução em uma versão do Windows que dá suporte a CoreApplication.EnablePrelaunch. Em geral, se houver alguma dúvida, você deverá usar uma API do Windows somente depois de determinar que ela é compatível com a plataforma na qual seu código está sendo executado. E você pode fazer isso por meio da classe ApiInformation , conforme mostrado no exemplo de código acima.
Também há um código no exemplo acima que você pode remover a marca de comentário se seu aplicativo precisar recusar a pré-inicialização ao ser executado no Windows 10, versão 1511. Na versão 1511, todos os aplicativos UWP foram automaticamente aceitos para pré-inicialização, o que pode não ser apropriado para seu aplicativo.
Usar o evento VisibilityChanged
Os aplicativos ativados pela pré-inicialização não são visíveis ao usuário. Eles ficam visíveis quando o usuário os alterna. Você poderá adiar determinadas operações até que a janela principal do aplicativo esteja visível. Por exemplo, se o aplicativo exibir uma lista de itens de novidades de um feed, você poderá atualizar a lista durante o evento VisibilityChanged, em vez de usar a lista que foi criada quando o aplicativo foi pré-inicializado, pois ela pode estar obsoleta no momento em que o usuário ativa o aplicativo. O código a seguir manipula o evento VisibilityChanged de MainPage:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
Window.Current.VisibilityChanged += WindowVisibilityChangedEventHandler;
}
void WindowVisibilityChangedEventHandler(System.Object sender, Windows.UI.Core.VisibilityChangedEventArgs e)
{
// Perform operations that should take place when the application becomes visible rather than
// when it is prelaunched, such as building a what's new feed
}
}
Diretrizes de jogos em DirectX
Os jogos em DirectX geralmente não devem permitir pré-inicialização porque muitos jogos em DirectX fazem a inicialização antes de a pré-inicialização ser detectada. A partir do Windows 1607, a edição de aniversário, seu jogo não será pré-inicializado por padrão. Se você quiser que seu jogo tire proveito da pré-inicialização, chame CoreApplication.EnablePrelaunch(true).
Se seu jogo direcionar uma versão anterior do Windows 10, você poderá manipular a condição de pré-inicialização para sair do aplicativo:
void ViewProvider::OnActivated(CoreApplicationView const& /* appView */, Windows::ApplicationModel::Activation::IActivatedEventArgs const& args)
{
if (args.Kind() == Windows::ApplicationModel::Activation::ActivationKind::Launch)
{
auto launchArgs{ args.as<Windows::ApplicationModel::Activation::LaunchActivatedEventArgs>()};
if (launchArgs.PrelaunchActivated())
{
// Opt-out of Prelaunch.
CoreApplication::Exit();
}
}
}
void ViewProvider::Initialize(CoreApplicationView const & appView)
{
appView.Activated({ this, &App::OnActivated });
}
void ViewProvider::OnActivated(CoreApplicationView^ appView,IActivatedEventArgs^ args)
{
if (args->Kind == ActivationKind::Launch)
{
auto launchArgs = static_cast<LaunchActivatedEventArgs^>(args);
if (launchArgs->PrelaunchActivated)
{
// Opt-out of Prelaunch
CoreApplication::Exit();
return;
}
}
}
Orientação geral
- Os aplicativos não devem executar operações de longa duração durante a pré-inicialização porque o aplicativo será encerrado se não puder ser suspenso rapidamente.
- Os aplicativos não devem iniciar a reprodução de áudio de Application.OnLaunched quando o aplicativo for pré-inicializado, pois o aplicativo não estará visível e ele não ficará aparente porque o áudio está sendo reproduzido.
- Os aplicativos não devem executar operações durante a inicialização que pressuponham que o aplicativo esteja visível para o usuário ou que o aplicativo tenha sido iniciado explicitamente pelo usuário. Como um aplicativo agora pode ser iniciado em segundo plano sem ação explícita do usuário, os desenvolvedores devem levar em consideração a privacidade, a experiência do usuário e as implicações sobre o desempenho.
- Um exemplo de consideração de privacidade acontece quando um aplicativo de rede social deve alterar o estado do usuário para online. Ele deve aguardar até que o usuário alterne para o aplicativo, em vez de alterar o status quando o aplicativo é pré-inicializado.
- Um exemplo de consideração de experiência do usuário é que, se você tiver um aplicativo, como um jogo, que exiba uma sequência introdutória quando é iniciado, você poderá atrasar a sequência introdutória até o usuário alternar para o aplicativo.
- Um exemplo de implicação de desempenho é que você poderá aguardar até o usuário alternar para o aplicativo a fim de recuperar as informações de clima atuais, em vez de carregá-las quando o aplicativo é pré-inicializado e, depois, recarregá-las quando o aplicativo ficar visível, para garantir que as informações estejam atualizadas.
- Caso o aplicativo limpe o Bloco Dinâmico quando iniciado, adie isso até o evento de visibilidade alterada.
- A telemetria do aplicativo deve distinguir ativações de bloco normais e ativações de pré-lançamento para facilitar a limitação do cenário se problemas ocorrerem.
- Se você tiver o Microsoft Visual Studio 2015 Atualização 1 e o Windows 10, versão 1511, poderá simular a pré-inicialização do Aplicativo em seu aplicativo no Visual Studio 2015 escolhendo Depurar>Outros Destinos> deDepuração Depurar Pré-Inicialização do Aplicativo Universal do Windows.
Tópicos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de