可以异步/等待了解Android活动生命周期吗?

时间:2014-07-08 17:08:16

标签: c# android asynchronous xamarin

我一直想知道使用async / await在Android上生成响应式UI。我一直在围绕异步函数使用一个简单的pub / sub包装器服务(这是很多样板,但是很有效)但是我已经有了这个痒,告诉我应该有更好的方法。

对包装器服务的需求源于这样一个事实:android上的活动在配置更改(设备轮换,语言更改......)上被“回收”(销毁和重新创建),所以如果我触发异步功能,则await回调可能在被破坏的活动中产生,各种坏事都可能源于此。

异步后端是否可以知道代码应该在没有编译器黑暗魔法的不同对象(新创建的活动)中启动?

基本原理:在您遇到此问题之前,使用Xamarin在iOS和Android之间共享代码非常简单易用。如果以某种方式解决/实现,我看到两个平台之间的共同控制器的潜力。

编辑: 我决定用事件总线(TinyMessenger)解决这个问题,同时我理解@Servy提出的SynchronizationContext解决方案

1 个答案:

答案 0 :(得分:2)

当然,它专门设计用于做到这一点。每当你点击await时,它都会检查SynchronizationContext.Current的值,并将继续发布到该上下文。如果你想要一个特定的回调到特定的上下文,你只需要将当前上下文设置为适当编组你的回调的SynchronizationContext对象......但是你需要它们被编组。