none
如何用编程的方式重启应用程序? RRS feed

  • 问题

  • 如题。

    对windows phone的程序执行模型,真的是难以理解。如果真的像开发文档上介绍的那样,对每个页面状态进行保存,对应用程序状态进行保存,页面及数据简单的话还可以,要是一复杂起来,这真的是令人头疼。

    看文档上说进入休眠时可能会进行逻辑删除也会终止,那什么样的状态下会进行逻辑删除,什么样的状况下会进行终止,能否解释得更清楚一些?看文档上说如果进行逻辑删除后会进行状态的恢复,为什么只能恢复UI,动态获取的数据都被清了。。。

    采取比较暴力的方法,如果active的时候判断程序是从逻辑删除的状态中激活的,重启应用程序是否可行?

    2012年5月31日 6:26

答案

  • 目前没有办法用程序重启应用程序。

    为什么只能恢复UI,动态获取的数据都被清了。。。 我来解释一下:是因为之前的页面实例都销毁了,所以会重新调用页面的构造函数,也就是说并非是恢复了UI,而是重新构造了UI。于是在构造函数之后填进去的数据,当然是没有的了。

    • 已标记为答案 Otomii Lu 2012年6月7日 2:07
    2012年5月31日 8:10
  • 如果需要呈现之前的数据,那就要在应用程序中自行保存,恢复后加载保存的数据。

    专注于Windows Phone

    • 已标记为答案 Otomii Lu 2012年6月7日 2:07
    • 取消答案标记 Otomii Lu 2012年6月7日 2:07
    • 已标记为答案 Otomii Lu 2012年6月7日 2:08
    2012年5月31日 8:15
    版主

全部回复

  • 目前没有办法用程序重启应用程序。

    为什么只能恢复UI,动态获取的数据都被清了。。。 我来解释一下:是因为之前的页面实例都销毁了,所以会重新调用页面的构造函数,也就是说并非是恢复了UI,而是重新构造了UI。于是在构造函数之后填进去的数据,当然是没有的了。

    • 已标记为答案 Otomii Lu 2012年6月7日 2:07
    2012年5月31日 8:10
  • 如果需要呈现之前的数据,那就要在应用程序中自行保存,恢复后加载保存的数据。

    专注于Windows Phone

    • 已标记为答案 Otomii Lu 2012年6月7日 2:07
    • 取消答案标记 Otomii Lu 2012年6月7日 2:07
    • 已标记为答案 Otomii Lu 2012年6月7日 2:08
    2012年5月31日 8:15
    版主
  • 按你的建议我在每个页面的

    OnNavigatedFrom中对页面进行了状态保存,但是问题是我发现很耗性能,它会阻止UI进程,以至于导航到另外一个页面时会有卡的现象,特别是当当前页面的保存的数据量有点大时,比如说一个长列表。

    我用性能分析工具分析了一下,发现有些方法特别的耗CPU

    Method Name Inclusive Samples Exclusive Samples Inclusive Samples (%) Exclusive Samples (%) Thread Name
    System.Runtime.Serialization.XmlObjectSerializer.ReadObject(System.IO.Stream) 89 0 100 % 0 % User Interface Thread
    System.Runtime.Serialization.XmlObjectSerializer.ReadObject(System.Xml.XmlDictionaryReader) 89 0 100 % 0 % User Interface Thread
    System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(System.Runtime.Serialization.XmlReaderDelegator,bool) 89 0 100 % 0 % User Interface Thread

    然后我把

    OnNavigatedFrom中注释了存储语句,发现页面导航就滑溜多了,请问您有什么好的建议么?因为不保存页面状态,随时会有程序崩溃的时候。我对于线程也不是很了解,对于页面状态的保存是在UI线程上吗,能否迁到其它线程上去?

    2012年6月8日 6:13
  • 不要在OnNavigatedFrom方法中做耗时的操作,因为这个方法是在下个页面第一帧显示之前调用的,可以在Unloaded中做这些。

    2012年6月13日 9:32