我正在开发我的第一个Windows Phone 7应用程序。我还没有访问实际的设备,所以我依赖SDK附带的模拟器。
在我的应用中,我根据需要使用EmailComposeTask
和SmsComposeTask
。在模拟器中调试我的应用程序时,我单击一个按钮来运行其中一个任务,它可以工作。但是当我按下后退按钮退出任务并返回我的应用程序时,应用程序状态就会丢失 - 就好像我重新启动它一样。
但是,如果它变得奇怪,那有时候这种情况不会发生。我不止一次从其中一个任务回来,发现我的应用程序状态确切地说我离开了它。
所以,我的问题:
感谢。
答案 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
永远不会导致墓碑,所以您仍然应该处理它,但它解释了为什么您的页面状态有时会自动保留。