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

Ros*_*oss 0 state windows-phone-7

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

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

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

所以,我的问题:

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

谢谢.

key*_*rdP 5

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

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

您的应用程序并不总是被逻辑删除的原因是因为EmailComposeTask不会立即导致墓碑.来自这篇MSDN博文:

下面是本机体验列表,在调用时,不会在调用应用程序中触发自动逻辑删除:

PhotoChooserTask
CameraCaptureTask
MediaPlayerLauncher
EmailAddressChooserTask
PhoneNumberChooserTask
Run Code Online (Sandbox Code Playgroud)

有三种情况下,后台应用程序将立即被逻辑删除:

User forward navigates away from an application [for example, user
Run Code Online (Sandbox Code Playgroud)

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

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