【问题标题】:Can async/await be made aware of the Android activity lifecycle?可以让 async/await 了解 Android 活动生命周期吗?
【发布时间】:2014-07-08 17:08:15
【问题描述】:

我一直想知道如何使用 async/await 在 Android 上生成响应式 UI。我一直在围绕异步函数使用一个简单的 pub/sub 包装服务(这是相当多的样板,但可以工作),但我有这种痒,告诉我应该有更好的方法。

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

能否以某种方式让异步后端意识到代码应该在不同的对象(新创建的活动)中触发,而无需编译器黑魔法?

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

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

【问题讨论】:

  • 确实是个有趣的问题。

标签: c# android asynchronous xamarin


【解决方案1】:

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

【讨论】:

  • 有趣... 这个问题完全源于我浏览该课程的 MSDN 页面。我会更深入地调查此事
猜你喜欢
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2022-12-13
  • 2013-01-13
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
相关资源
最近更新 更多