EmailComposeTask / SmsComposeTask丢失了我的应用状态

时间:2011-06-18 10:38:16

标签: windows-phone-7 state

我正在开发我的第一个Windows Phone 7应用程序。我还没有访问实际的设备,所以我依赖SDK附带的模拟器。

在我的应用中,我根据需要使用EmailComposeTaskSmsComposeTask。在模拟器中调试我的应用程序时,我单击一个按钮来运行其中一个任务,它可以工作。但是当我按下后退按钮退出任务并返回我的应用程序时,应用程序状态就会丢失 - 就好像我重新启动它一样。

但是,如果它变得奇怪,那有时候这种情况不会发生。我不止一次从其中一个任务回来,发现我的应用程序状态确切地说我离开了它。

所以,我的问题:

  1. 这只是模拟器的错误吗?
  2. 如果没有,为什么不一致,如何在调用电子邮件或短信任务之前“保存”我的应用状态?
  3. 感谢。

1 个答案:

答案 0 :(得分:5)

您的网页正在被逻辑删除,这就是您的应用程序似乎已重新启动的原因。这基本上意味着您的应用程序仍然存储在堆栈中,随时可以调用,但页面状态和其他数据信息将丢失。要解决此问题,您需要处理要保留的任何数据的序列化。

对于瞬态数据,例如页面状态(例如文本框,复选框等),您可以使用PhoneApplicationPage.State。我认为限制是2mb。如果您需要存储更多,则应将其存储在独立存储中(除非您需要保存图像,否则不太可能)。您可以阅读有关流程here的信息。要了解Tombstoning的过程,您应该阅读此MSDN page。为了节省时间,您可以使用Tombstone Helper来处理所有较低级别的存储详细信息,但最好还是了解逻辑删除的过程,以便了解正在发生的事情。

您的应用并不总是被逻辑删除的原因是因为EmailComposeTask不会立即导致墓碑。从MSDN blog post

开始
  

以下是本机列表   经验,在被调用时,不会   触发自动墓碑   调用应用程序:

PhotoChooserTask
CameraCaptureTask
MediaPlayerLauncher
EmailAddressChooserTask
PhoneNumberChooserTask
     

有三种情况   在后台应用会   立即被墓碑化:

User forward navigates away from an application [for example, user
     

按开始键]       应用程序调用上面未列出的发射器或选择器       系统需要更多资源来执行前台活动

正如您所看到的,这并不是说EmailComposeTask永远不会导致墓碑,所以您仍然应该处理它,但它解释了为什么您的页面状态有时会自动保留。