FreshMvvm 生命周期问题
FreshMvvm lifecycle issue
我有一个使用 FreshMvvm 的 xamarin.forms 应用程序。 App.xaml.cs 中的以下方法处理推送通知:
public static async void NewCall(string message)
{
...
await Xamarin.Essentials.MainThread.InvokeOnMainThreadAsync(async () =>
{
if (!IsVideoCallViewOpen)
{
var navService = FreshIOC.Container.Resolve<IFreshNavigationService>(FreshMvvm.Constants.DefaultNavigationServiceName);
Page videoCallPage = FreshPageModelResolver.ResolvePageModel<VideoCallPageModel>();
await navService.PushPage(videoCallPage, null);
}
VideoCallMessage caller = JsonConvert.DeserializeObject<VideoCallMessage>(message);
VideoCallPeer peer = new VideoCallPeer(caller.UserId, caller.UserName, caller.FirstName);
OnStartCall?.Invoke(null, peer);
});
}
如您所见,navService.PushPage() 会根据需要打开某个 VideoCallPage。只有在 OnStartCall 事件之后才应该被触发。但它不会以这种方式发生。它在 VideoCallPageModel 的 Init() 方法完成执行之前触发,这会导致各种问题。如何确保在 VideoCallPage 完成加载之前不会触发 OnStartCall 事件?
这是 VideoCallPageModel 的 Init 签名:
public async override void Init(object initData)
这是处理 OnStartCall 事件的 VideoCallPageModel 的 StartCallHandler():
public void StartCallHandler(object sender, VideoCallPeer remotePeer)
您是否考虑过使用消息中心?
Messaging Center Documentation
您可以在确定准备就绪后发送消息,然后订阅它的任何人都会在收到消息后为您完成工作。
我有一个使用 FreshMvvm 的 xamarin.forms 应用程序。 App.xaml.cs 中的以下方法处理推送通知:
public static async void NewCall(string message)
{
...
await Xamarin.Essentials.MainThread.InvokeOnMainThreadAsync(async () =>
{
if (!IsVideoCallViewOpen)
{
var navService = FreshIOC.Container.Resolve<IFreshNavigationService>(FreshMvvm.Constants.DefaultNavigationServiceName);
Page videoCallPage = FreshPageModelResolver.ResolvePageModel<VideoCallPageModel>();
await navService.PushPage(videoCallPage, null);
}
VideoCallMessage caller = JsonConvert.DeserializeObject<VideoCallMessage>(message);
VideoCallPeer peer = new VideoCallPeer(caller.UserId, caller.UserName, caller.FirstName);
OnStartCall?.Invoke(null, peer);
});
}
如您所见,navService.PushPage() 会根据需要打开某个 VideoCallPage。只有在 OnStartCall 事件之后才应该被触发。但它不会以这种方式发生。它在 VideoCallPageModel 的 Init() 方法完成执行之前触发,这会导致各种问题。如何确保在 VideoCallPage 完成加载之前不会触发 OnStartCall 事件?
这是 VideoCallPageModel 的 Init 签名:
public async override void Init(object initData)
这是处理 OnStartCall 事件的 VideoCallPageModel 的 StartCallHandler():
public void StartCallHandler(object sender, VideoCallPeer remotePeer)
您是否考虑过使用消息中心?
Messaging Center Documentation
您可以在确定准备就绪后发送消息,然后订阅它的任何人都会在收到消息后为您完成工作。