如何删除MvvmCross Messenger订阅

时间:2018-07-09 10:42:31

标签: android xamarin.android mvvmcross

我正在为Xamarin.Android应用程序使用MvvmCross。我正在使用Messenger在Service和ViewModel之间进行通信。 例如:HomeViewModel具有用于ItemRefresh方法的订阅。我曾经从Service发布有关项的任何更改。下面是示例代码段。

public class HomeViewModel
{
 private MvxSubscriptionToken _updatedItemToken;
 public HomeViewModel()
 {
    _updatedItemToken = messenger.Subscribe<UpdatedItemMessage>(ItemUpdated);
 }
 public void ItemUpdated(UpdatedItemMessage message)
 {
    //my code to refresh the page.
 }
}

现在有什么问题?

一切正常,直到我介绍注销功能。 注销期间,无论您在应用程序中的位置如何,我都需要从导航堆栈中清除所有活动,并导航到登录页面

注销后,如果我转到HomeViewModel,则会再次添加“订阅”,并且消息增加一倍(在每条发布消息上均击中两次)。

我尝试了什么?

  1. 注销时清除订阅。使用_messenger.RequestPurgeAll();
  2. 尝试清除以下单个消息
  

if(_messenger.HasSubscriptionsFor())       {       messenger.RequestPurge(typeof(UpdatedItemMessage));       }

  1. 取消订阅消息OnDestroy()。它适用于页面导航,但不适用于注销。注销将立即清除所有活动,这不会调用每个可见活动的OnDestroy。退出代码如下。
  

var intent = new Intent(this,typeof(LoginView));
  intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);   StartActivity(intent); Finish();

有什么帮助吗?我不理解RequestPurge的使用,它应该对我有帮助,但对我没有帮助。

1 个答案:

答案 0 :(得分:0)

您是否尝试过处理从信使那里得到的MvxSubscriptionToken

在您的情况下:

_updatedItemToken.Dispose();

这应该使订阅消失。