我正在为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,则会再次添加“订阅”,并且消息增加一倍(在每条发布消息上均击中两次)。
我尝试了什么?
if(_messenger.HasSubscriptionsFor()) { messenger.RequestPurge(typeof(UpdatedItemMessage)); }
var intent = new Intent(this,typeof(LoginView));
intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask); StartActivity(intent); Finish();
有什么帮助吗?我不理解RequestPurge的使用,它应该对我有帮助,但对我没有帮助。
答案 0 :(得分:0)
您是否尝试过处理从信使那里得到的MvxSubscriptionToken
?
在您的情况下:
_updatedItemToken.Dispose();
这应该使订阅消失。