在从另一个线程发送 Intent 之前我需要额外的准备吗?

Do I need extra preparation before sending Intent from another thread?

我使用术语 Task context -- 作为 C# 任务类型 -- 和 Android context区分这两个实体。

最好要求 100% 确定 -- 当您使用 WPF 或 WindowsForms 时,您无法与 UI 自由交互。例如,当您使用 await 时,您希望保留任务上下文(因此通常没有 ConfigureAwait(false))。

所以我的问题是——当我尝试从另一个线程发送意图时,我是否也必须做一些准备,比如当我使用 await 时,我是否必须保留任务上下文?或者是发送准备本身的行为 - 类似于(牵强的)WPF 中的 Dispatcher.Invoke 类比?

换句话说,只要我的 Android 上下文有效,无论我在哪个线程上,我都可以盲目发送意图吗?或者它可能取决于目标线程——例如,当它是 main/UI 线程时,我应该做一些额外的事情,或者它保证始终正常工作?

假设您已经正确使用了 async 和 await 模式,那么应该不需要 marshal 回到 UI线程。它与 winformsWPF.

中的相同

规则的例外情况是当您知道自己 不是 运行 UI 上下文 (即,如果您使用 Task.Run 卸载到另一个线程等),在这种情况下,您将调用以下命令 marshal 回到 UI线程:

Device.BeginInvokeOnMainThread

Invokes an Action on the device main (UI) thread.

上面的Xamarin.Forms相当于Dispatcher.Invoke.