最新版本的Xamarin.Mobile组件淘汰了一些适用于 Android 的基于任务的 API。发布说明对此进行了简要评论:
由于 Activity 生命周期的实际情况,Android 上基于 Task<> 的 API 很脆弱,因此异步 API 现在专门为 Android 标记为 [已过时]。
有人可以解释一下这里的脆弱性是什么意思吗?
最新版本的Xamarin.Mobile组件淘汰了一些适用于 Android 的基于任务的 API。发布说明对此进行了简要评论:
由于 Activity 生命周期的实际情况,Android 上基于 Task<> 的 API 很脆弱,因此异步 API 现在专门为 Android 标记为 [已过时]。
有人可以解释一下这里的脆弱性是什么意思吗?
从本质上讲,Task
跨应用程序生命周期边界使用是自找麻烦。当相机Activity
在 Android 上启动时,您实际上是在启动一个全新的应用程序。您的应用程序不再在前台运行,因此 Android 完全有权终止您的应用程序并在相机返回时重新启动它。如果发生这种情况,您的Task
实例已被销毁,因此您拥有的任何await
s 或ContinueWith
s 将永远不会执行。这不是Task
/Android 问题,它只是 Xamarin.Mobile 中的设计缺陷。
结果,魔术 API 被弃用,取而代之的是使用 的 API OnActivityResult
,因为它是正确处理这种情况的唯一方法。如果您注意到,新 APIGetMediaFileExtraAsync
仍会返回一个Task<MediaFile>
.
(来源:我写了 Xamarin.Mobile)。