问题 我有一个Windows Phone 7应用程序如何确保它支持快速任务切换?


作为开发人员,我需要确保我的应用程序支持快速任务切换?

理想情况下,我正在寻找开发人员检查列表中的注意事项。

我做了搜索,但我发现的一切让我觉得我错过了一些东西,往往是更多的营销而不是开发人员的步骤和技术细节。

谢谢!


12532
2017-08-17 21:39


起源



答案:


FAS的大部分工作都是自动处理的。要记住的主要事项是Tombstoning对您的应用程序意味着什么。通过FAS恢复时,意图是您不必删除任何逻辑删除,因此通常不需要恢复视图模型状态或类似的东西。有几个地方你需要编写代码 - 这是一个快速清单。

PhoneApplicationPage.OnNavigatingFrom  - 试用您正在使用的控件,以确保FAS恢复为您提供的数据。例如 - TextBox控件正确记住您放入的所有内容,但MediaElement不记得视频或播放头的位置。

PhoneApplicationPage.OnNavigatedTo  - 您在OnNavigatingFrom中保存的任何内容都需要在OnNavigatedTo中重新应用。例如 - 将视频源重新加载到MediaElement中,重新定位视频并重新启动它。

Application.Activated  - 此事件的事件args现在包含一个名为IsApplicationInstancePreserved的属性。当应用程序通过FAS返回时,此属性返回TRUE;当应用程序从Tombstoning返回时,此属性返回FALSE。所以你有这样的代码:

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    if (!e.IsApplicationInstancePreserved)
    {
        RestoreStateFromTombstone();
    }
}

private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
    SaveStateForTombstone();
}

这是必需品。我还没有对FAS基础设施进行任何真正的压力测试,看看它在哪里断裂,但这对我迄今为止所进行的实验来说非常有用。

有关更多信息,请参阅MIX11会议的简短视频 为快速应用程序切换做好准备 由Adina Trufinescu提供,提供了有关FAS的更多细节,这无疑帮助我开始了。

/克里斯


14
2017-08-17 22:49





如果您要从Windows Phone 7.0中的普通逻辑删除应用程序升级,则唯一需要更改的是检查Application_Activated事件中的e.IsApplicationInstancePreserved - 如果此属性设置为true,则表示您没有必须从IsolatedStorage / State补充水分。正如Chris Koenig的出色回答中提到的那样:

//Windows Phone 7.0
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    RestoreStateFromTombstone();
}

//Windows Phone 7.1/7.5/Mango
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    if (!e.IsApplicationInstancePreserved)
    {
        RestoreStateFromTombstone();
    }
}

这种情况的症状是您通过多任务切换应用程序后数据绑定不再起作用(因为您正在重新创建对象状态,因此数据绑定不再有效)


0
2017-08-29 07:47



MSDN上还有一些资源 - msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx 如果您在该页面上没有其他内容,请阅读执行模型事件和应用程序操作摘要 - Henry C


答案:


FAS的大部分工作都是自动处理的。要记住的主要事项是Tombstoning对您的应用程序意味着什么。通过FAS恢复时,意图是您不必删除任何逻辑删除,因此通常不需要恢复视图模型状态或类似的东西。有几个地方你需要编写代码 - 这是一个快速清单。

PhoneApplicationPage.OnNavigatingFrom  - 试用您正在使用的控件,以确保FAS恢复为您提供的数据。例如 - TextBox控件正确记住您放入的所有内容,但MediaElement不记得视频或播放头的位置。

PhoneApplicationPage.OnNavigatedTo  - 您在OnNavigatingFrom中保存的任何内容都需要在OnNavigatedTo中重新应用。例如 - 将视频源重新加载到MediaElement中,重新定位视频并重新启动它。

Application.Activated  - 此事件的事件args现在包含一个名为IsApplicationInstancePreserved的属性。当应用程序通过FAS返回时,此属性返回TRUE;当应用程序从Tombstoning返回时,此属性返回FALSE。所以你有这样的代码:

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    if (!e.IsApplicationInstancePreserved)
    {
        RestoreStateFromTombstone();
    }
}

private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
    SaveStateForTombstone();
}

这是必需品。我还没有对FAS基础设施进行任何真正的压力测试,看看它在哪里断裂,但这对我迄今为止所进行的实验来说非常有用。

有关更多信息,请参阅MIX11会议的简短视频 为快速应用程序切换做好准备 由Adina Trufinescu提供,提供了有关FAS的更多细节,这无疑帮助我开始了。

/克里斯


14
2017-08-17 22:49





如果您要从Windows Phone 7.0中的普通逻辑删除应用程序升级,则唯一需要更改的是检查Application_Activated事件中的e.IsApplicationInstancePreserved - 如果此属性设置为true,则表示您没有必须从IsolatedStorage / State补充水分。正如Chris Koenig的出色回答中提到的那样:

//Windows Phone 7.0
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    RestoreStateFromTombstone();
}

//Windows Phone 7.1/7.5/Mango
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    if (!e.IsApplicationInstancePreserved)
    {
        RestoreStateFromTombstone();
    }
}

这种情况的症状是您通过多任务切换应用程序后数据绑定不再起作用(因为您正在重新创建对象状态,因此数据绑定不再有效)


0
2017-08-29 07:47



MSDN上还有一些资源 - msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx 如果您在该页面上没有其他内容,请阅读执行模型事件和应用程序操作摘要 - Henry C