【问题标题】:Mvvmcross Subscription message firing stalls for 20+ secs after first viewmodel is shown在显示第一个视图模型后,Mvvmcross 订阅消息触发停止 20 多秒
【发布时间】:2015-03-28 16:41:31
【问题描述】:

在我的一些视图模型和一些后台运行的服务中,我需要对各种操作进行第二次勾选,例如状态机进程等。 为了避免必须为每个场合创建一个计时器,我有一个 TimerService,它每秒发布一个 Messenger 插件消息。 那些需要它的视图模型或服务只需订阅此消息。 一年多来,这一直运作良好。最近我注意到我的应用程序的启动时间相当长。经过一些调试后,我发现在第一个 Viewmodel 启动后(它已正确显示),订阅开始接收此消息之前大约需要 25 秒。似乎有些东西阻碍了这些消息的发布。 在这 20 多秒内,MvvmCross 根本没有任何活动。 Mvvmcross 根本没有记录任何内容。

什么可能导致这种行为?在启动序列中,Messenger 插件何时开始分发其消息?

我很抱歉没有在这里发布代码,因为这种现象正在整个应用程序中发生。在后台运行的单例服务都不会接收这些消息,直到 20 秒后一切都开始正常工作。

编辑:MvvmCross V3.5 与 Xamarin 的最新稳定更新一起使用。每个测试的 Android 版本都会出现问题。

【问题讨论】:

    标签: mvvmcross


    【解决方案1】:

    经过一些试验(并再次阅读所有 MvxMessenger 文档)后,我尝试使用 SubscribeOnThreadPoolThread 方法,而不是简单地订阅通常触发在其处理程序中定期更新视图模型属性的已发布消息之一。这使问题消失了。 通常,如果此 viewrefresh 消息很快并且不需要更多的处理,则将存储库值(由后台服务更新)复制到可见的 viewmodel 属性。我猜在某个刷新处理程序中的某个地方有一个同步调用使信使系统阻塞。还没有找到它。 哪些典型情况会导致 Messenger 插件受阻?我很想更好地理解这一点。

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 2021-02-27
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多