gpt4 book ai didi

mvvmcross - MvvmCross Messenger插件清除订阅

转载 作者:行者123 更新时间:2023-12-04 13:27:27 28 4
gpt4 key购买 nike

我在MvvmCross应用程序中使用了Messenger插件,并且注意到它有时会清除我的订阅(“一个或多个监听器失败-已清除清除”)。这在我的应用程序中导致错误。默认情况下,我对订阅使用弱引用,并且我不取消订阅该消息。

我需要取消订阅吗?弱引用的目的不是要对其进行垃圾回收吗?

我的BaseView订阅了构造函数,如下所示。

 public BaseView()
{
_messenger = Mvx.Resolve<IMvxMessenger>();
_messenger.Subscribe<MyMessage>(s => Method());
}

以下是我的广播接收器发布我的消息。
 var _messenger = Mvx.Resolve<IMvxMessenger>();
_messenger.Publish<MyMessage>(new MyMessage(this));

我有一个尝试取消订阅onDestroy的想法。

如果您能给我一些了解为什么会发生这种情况以及可能的解决方法,我将不胜感激。

提前致谢。

最佳答案

使用弱引用时,将返回的订阅 token 存储在类级字段中很重要。

private IDisposable _token;

public BaseView()
{
_messenger = Mvx.Resolve<IMvxMessenger>();
_token = _messenger.Subscribe<MyMessage>(OnMyMessage);
}

private void OnMyMessage(MyMessage msg)
{
// code
}

如果您不这样做,则GarbageCollector可以免费收集订阅。

有关更多信息,请参见wikit中的“从Subscriber返回的订阅 token 被垃圾回收时,将发生基于GC的取消订阅”部分。

关于mvvmcross - MvvmCross Messenger插件清除订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19654445/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com