【问题标题】:FilePicker keeps crashing in gallery (WP 8.1 RT)FilePicker 在图库中不断崩溃(WP 8.1 RT)
【发布时间】:2016-03-09 03:41:50
【问题描述】:

我有一个 Windows Phone 8.1 RT 应用程序,我在其中使用FilePicker API 从图库中选择图像。但是,当用户在图库中选择图像时,应用程序会不断崩溃。

应用程序在两种不同的情况下崩溃:

  1. 用户打开文件选择器以浏览图库中的图像,在浏览自身时应用程序终止并且图库关闭(显示 WP 8.1 的主屏幕)。

  2. 用户选择一些文件并按下完成按钮,此时应用程序开始恢复,但在恢复时失败并崩溃(显示主屏幕)。

文件选择器可以正常工作,但上述两次崩溃会间歇性地发生。这些崩溃有什么解决办法吗?

【问题讨论】:

  • 看起来崩溃的发生是因为您的应用处理暂停/恢复的方式。当您的应用程序调用文件选择器 UI 时,如果需要资源(RAM/CPU),WP 将暂停您的应用程序。我建议向我们提供有关您如何处理应用程序暂停和恢复的更多信息。另外,您是否在 Visual Studio 的输出窗口中看到任何异常消息?
  • @Flipper:您可以发布任何解决方案吗?
  • @vITs 添加了答案。

标签: c# windows-runtime windows-phone-8.1 winrt-xaml


【解决方案1】:

应用程序崩溃了,因为 OnSuspending() 方法花费了太多时间来完成执行。因此,操作系统不断终止应用程序。

应用崩溃的场景如下:

  1. 调用FilePicker API 并将用户导航到图库视图。同时,OnSuspending() 方法仍在执行中,由于方法中的lock 需要等待,该方法从未返回,迫使操作系统强制终止应用程序,而用户仍在图库视图中。操作系统的强制终止基本上也终止了FilePicker API,并且图库视图也被关闭,使用户回到主屏幕。

  2. 此场景与上述类似。除了画廊仍然打开时,操作系统不会终止应用程序。一旦用户从库中选择了一个项目,操作系统就会开始恢复应用程序并尝试调用OnResuming 方法。但它意识到应用程序尚未终止并且OnSuspending 方法仍在执行(等待获取lock 对象)。当操作系统尝试恢复尚未暂停的应用程序时发生的这种状态不匹配导致操作系统终止应用程序。

我基本保证OnSuspending方法快速返回,修复了上面的崩溃问题。

【讨论】:

  • 我在打开文件选择器之前调用了 SaveState,并在 OnSuspending 方法中使用了一些未调用 SaveState 的标志,因为状态已经保存以最小化所需的时间。我还在 OnSuspending 中添加了 try catch,我应该删除它吗?
  • @vITs 您的 FilePicker 崩溃场景是否与我提到的类似(它只是间歇性崩溃,而不是每次都崩溃)?我建议您记录OnSuspending() 方法所花费的时间,并在OnResuming() 方法中插入一个日志行。这会让您了解崩溃是否发生在暂停之前、暂停期间、恢复时等。
  • 是的......它在大多数情况下都不会崩溃......但是随机崩溃......我认为 SaveState 需要时间,所以我在 FileOpenPicker 之前完成了它,并且标志立即从 OnSuspending 事件返回。除了 SuspensionManager.SaveAsync() 之外,我什么都没做。
  • 当媒体在后台播放时,我在实时 beta 版本中进行应用购买时遇到了同样的崩溃。我在应用程序购买之前停止了播放器。这个崩溃不是出现在 CurrentAppSimulator 中,而是出现在 CurrentApp 中,因为它在启动商店产品进行购买之前需要网络,你遇到过这种情况吗?
  • @vITs 不,从未使用过CurrentAppSimulator API。当FilePicker暂停应用程序时,我的崩溃是失败的恢复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 2016-05-29
  • 2018-04-13
  • 1970-01-01
相关资源
最近更新 更多