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”,应用存储数据失败,并且应用会像初始化启动一样重新开始。

posted on 2013-01-13 09:16  冯瑞涛  阅读(351)  评论(0编辑  收藏  举报