3

最新版本的Xamarin.Mobile组件淘汰了一些适用于 Android 的基于任务的 API。发布说明对此进行了简要评论:

由于 Activity 生命周期的实际情况,Android 上基于 Task<> 的 API 很脆弱,因此异步 API 现在专门为 Android 标记为 [已过时]。

有人可以解释一下这里的脆弱性是什么意思吗?

4

1 回答 1

3

从本质上讲,Task跨应用程序生命周期边界使用是自找麻烦。当相机Activity在 Android 上启动时,您实际上是在启动一个全新的应用程序。您的应用程序不再在前台运行,因此 Android 完全有权终止您的应用程序并在相机返回时重新启动它。如果发生这种情况,您的Task实例已被销毁,因此您拥有的任何awaits 或ContinueWiths 将永远不会执行。这不是Task/Android 问题,它只是 Xamarin.Mobile 中的设计缺陷。

结果,魔术 API 被弃用,取而代之的是使用 的 API OnActivityResult,因为它是正确处理这种情况的唯一方法。如果您注意到,新 APIGetMediaFileExtraAsync仍会返回一个Task<MediaFile>.

(来源:我写了 Xamarin.Mobile)。

于 2013-10-22T16:25:46.113 回答