• Windows 8 生命周期管理(3)


    15.2 应用状态处理

    下面将介绍Metro风格的应用中,激活,挂起,恢复的具体方法,以及响应应用的生命周期事件。

    15.2.1 应用激活

    首先,重写OnLaunched处理函数。当应用被激活时,处于某些原因会发送Activated事件。Windows.UI.Xaml.Application类定义了一些方法,可以用来重写处理函数,处理不同激活类型的情况,有几种激活类型带有具体的可重写方法,对于其他的激活类型,重写OnActivated方法即可。

    下面的代码为应用程序定义了一个类。

    <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    x:Class="AppName.App" >

    重写的OnLaunched方法,在用户启动应用程序时都会调用。“LaunchActivatedEventArgs”参数包含应用之前的状态和激活参数值,代码如下。

    using System;

    using Windows.ApplicationModel;

    using Windows.ApplicationModel.Activation;

    using Windows.UI.Xaml;

    namespace AppName

    {

    public partial class App

    {

    async protected override void OnLaunched(LaunchActivatedEventArgs args)

    {

    EnsurePageCreatedAndActivate();

    }

    // 如果之前没有创建,就创建一个MainPage,并激活窗口。

    private MainPage EnsurePageCreatedAndActivate()

    {

    if (Window.Current.Content == null)

    {

    Window.Current.Content = new MainPage();

    }

    Window.Current.Activate();

    return Window.Current.Content as MainPage;

    }

    }

    }

    之后,如果应用是被挂起然后终止的,还原应用数据。当用户切换到被终止的应用时,系统发送一个激活事件(Activated event),将“Kind”属性值设为“Launch”,“PreviousExecutionState”属性值设为“Terminated”或“ClosedByUser”,应用则会加载其存储的应用数据,并刷新其所展示内容。

    async protected override void OnLaunched(LaunchActivatedEventArgs args)

    {

    if (args.PreviousExecutionState == ApplicationExecutionState.Terminated ||

    args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)

    {

    // TODO: 使用之前存储的应用的数据,供界面内容的展示

    }

    else

    {

    // TODO: 界面内容使用默认值

    }

    EnsurePageCreatedAndActivate();

    }

    如果“PreviousExecutionState”的值为“NotRunning”,应用存储数据失败,并且应用会像初始化启动一样重新开始。

  • 相关阅读:
    QT5笔记:1.UI文件设计与运行机制
    QStringListModel的使用
    D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES > off
    QT5笔记:3.手动撸界面和可视化托界面混合
    Qt QString的格式化与QString的拼接
    C# WinForm UDP 发送和接收消息
    关于Convert.ToUInt16(string? value, int fromBase);
    QT5笔记:2.可视化UI设计
    OpenCvSharp 打开rtsp视频并录制mp4文件
    C# List LinQ Lambda 表达式
  • 原文地址:https://www.cnblogs.com/finehappy/p/2858205.html
Copyright © 2020-2023  润新知