使用 IMvxMessenger 获取消息两次
Getting Messege Twice Using IMvxMessenger
我正在处理 Xamrin Android 应用程序并且我正在使用 MvvmCross.In 我已经使用过的应用程序 IMvxMessenger.But 当我更改视图并返回相同的视图时,我遇到了两次混乱 view.And 然后它崩溃了。
解决办法是什么 ?
这是我的代码:
在 ViewModel 中,我有这段代码:
var messanger = Mvx.Resolve<IMvxMessenger>();
var message = new MyMessage(this,"Product has been added",cartListCount);
messanger.Publish(message);
在视图中我有这个代码:
private MvxSubscriptionToken _token;
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = base.OnCreateView(inflater, container, savedInstanceState);
messenger = Mvx.Resolve<IMvxMessenger>();
_token = messenger.SubscribeOnMainThread<MyMessage>(OnInputIsNeeded,MvxReference.Strong);
return view;
}
private void OnInputIsNeeded(MyMessage _Message)
{
Toast.MakeText (this.Activity,_Message.Message, ToastLength.Short).Show();
messenger.Unsubscribe<MyMessage> (_token);
}
视图(无论是活动还是片段)一直在创建和销毁。由于您在 OnCreateView() 中订阅,您应该在 OnDestroyView().
中取消订阅
可能发生的情况是 OnCreateView() 被多次调用并导致添加多个订阅。 MvxMessenger 正在向所有订阅者广播消息。如果一个视图被销毁,但还没有取消订阅,它很可能会崩溃,因为回调不再存在。
我正在处理 Xamrin Android 应用程序并且我正在使用 MvvmCross.In 我已经使用过的应用程序 IMvxMessenger.But 当我更改视图并返回相同的视图时,我遇到了两次混乱 view.And 然后它崩溃了。 解决办法是什么 ? 这是我的代码: 在 ViewModel 中,我有这段代码:
var messanger = Mvx.Resolve<IMvxMessenger>();
var message = new MyMessage(this,"Product has been added",cartListCount);
messanger.Publish(message);
在视图中我有这个代码:
private MvxSubscriptionToken _token;
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var view = base.OnCreateView(inflater, container, savedInstanceState);
messenger = Mvx.Resolve<IMvxMessenger>();
_token = messenger.SubscribeOnMainThread<MyMessage>(OnInputIsNeeded,MvxReference.Strong);
return view;
}
private void OnInputIsNeeded(MyMessage _Message)
{
Toast.MakeText (this.Activity,_Message.Message, ToastLength.Short).Show();
messenger.Unsubscribe<MyMessage> (_token);
}
视图(无论是活动还是片段)一直在创建和销毁。由于您在 OnCreateView() 中订阅,您应该在 OnDestroyView().
中取消订阅可能发生的情况是 OnCreateView() 被多次调用并导致添加多个订阅。 MvxMessenger 正在向所有订阅者广播消息。如果一个视图被销毁,但还没有取消订阅,它很可能会崩溃,因为回调不再存在。