簡體   English   中英

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)

您是否考慮過使用消息中心?

消息中心文檔

一旦你確定你准備好了,你就可以發送一條消息,然后訂閱它的任何內容都會在收到消息后為你完成工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM