是否可以将MessageCenter订阅放置在仅在应用程序中构造的选项卡式页面中?

时间:2018-11-09 07:34:42

标签: xamarin xamarin.forms

我的应用程序由五个选项卡式页面组成,仅此而已。在启动时,所有这些选项卡页均已构建,并保持这种状态,直到应用程序退出:

 public partial class MainPage : TabbedPage

    public MainPage()
    {
        InitializeComponent();

        App.cardsPage = new DictionaryTab();
        App.homePage = new HomePage();
        App.helpPage = new HelpPage();
        App.settingsPage = new SettingsPage();
        App.phrasesPage = new PhrasesFrame(this);

        App.navHomePage = new NavigationPage(App.homePage);
        App.navHelpPage = new NavigationPage(App.helpPage);
        App.navSettingsPage = new NavigationPage(App.settingsPage);
        App.navCardsPage = new NavigationPage(App.cardsPage);
        App.navPhrasesFrame = new NavigationPage(App.phrasesPage);

        Children.Add(App.navHomePage);
        Children.Add(App.navHelpPage);
        Children.Add(App.navSettingsPage);
        Children.Add(App.navCardsPage);
        Children.Add(App.navPhrasesFrame);
    }

在四个页面的构造函数中,我正在订阅MessageCenter消息。从我的观察来看,这些构造函数在应用程序的生命周期中仅运行一次。

据我了解,这不是正常的做法,但在这种情况下,它使我可以更新页面,以便稍后查看页面时可以立即获得结果。

在这种情况下,并且仅在这种情况下,我想知道是否会出现问题。我了解,如果页面被多次构造,可能会导致许多问题,例如多重订阅,内存问题等,但是如果它们是选项卡式页面,则在应用程序启动时仅打开一次。那会是一个问题,如果是的话,那会是什么问题?

1 个答案:

答案 0 :(得分:1)

您当然可以在这里订阅。但是您将需要在页面/应用程序的生命周期中找到要取消订阅的点。否则,此页面可能永远存在,并泄漏内存。

一个更好的选择可能是在出现时订阅,然后在评论消失时取消订阅。

您还可以在构造函数中进行订阅,而在消失的结构中取消订阅,但是如果页面仅被实例化一次,则订阅事件将不再发生。