FreshMvvm 生命周期问题

时间:2021-01-01 19:43:49

标签: xamarin.forms freshmvvm

我有一个使用 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)

1 个答案:

答案 0 :(得分:1)

您是否考虑过使用消息中心?

Messaging Center Documentation

一旦你确定你准备好了,你就可以发送一条消息,然后任何订阅它的东西都会在收到消息后为你做工作。