我一直想知道使用async / await在Android上生成响应式UI。我一直在围绕异步函数使用一个简单的pub / sub包装器服务(这是很多样板,但是很有效)但是我已经有了这个痒,告诉我应该有更好的方法。
对包装器服务的需求源于这样一个事实:android上的活动在配置更改(设备轮换,语言更改......)上被“回收”(销毁和重新创建),所以如果我触发异步功能,则await回调可能在被破坏的活动中产生,各种坏事都可能源于此。
异步后端是否可以知道代码应该在没有编译器黑暗魔法的不同对象(新创建的活动)中启动?
基本原理:在您遇到此问题之前,使用Xamarin在iOS和Android之间共享代码非常简单易用。如果以某种方式解决/实现,我看到两个平台之间的共同控制器的潜力。
编辑:
我决定用事件总线(TinyMessenger)解决这个问题,同时我理解@Servy提出的SynchronizationContext
解决方案
答案 0 :(得分:2)
当然,它专门设计用于做到这一点。每当你点击await
时,它都会检查SynchronizationContext.Current
的值,并将继续发布到该上下文。如果你想要一个特定的回调到特定的上下文,你只需要将当前上下文设置为适当编组你的回调的SynchronizationContext
对象......但是你需要它们被编组。