异步/等待能否意识到Android活动生命周期?

3
我一直在思考如何使用async/await在Android上产生响应式UI。我已经使用了一个简单的pub/sub包装服务来包装异步函数(这需要相当多的样板代码,但是它可以工作),但是我一直有一种感觉告诉我应该有更好的方法。
包装服务的需求源于android上的活动会因为配置更改(设备旋转、语言更改等)而“回收”(销毁和重新创建),所以如果我启动一个异步函数,等待回调可能会在销毁的活动上产生,并且可能会产生各种问题。
能否使异步后端在不使用编译器黑魔法的情况下意识到代码应该在另一个对象(新创建的活动)中启动?
原理:使用Xamarin共享iOS和Android之间的代码很容易,直到你遇到这个问题。如果解决/实现了这个问题,我看到了两个平台之间通用控制器的潜力。
编辑:我已经决定使用事件总线(TinyMessenger)解决这个问题,同时我也理解了@Servy提出的SynchronizationContext解决方案。

有趣的问题,确实。 - Federico Berasategui
1个回答

2

当然,它是专门设计用来做这件事的。每次你遇到await,它都会检查SynchronizationContext.Current的值,并将继续执行的流程发送到该上下文。如果你想让特定的回调进入特定的上下文,你只需要将当前上下文设置为适当传输你的回调的SynchronizationContext对象即可。


有趣...这个问题正是源于我瞥了一眼那个类的MSDN页面。我会深入研究这个问题。 - Machinarius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接