Navigation.PushAsync()。当按下后退箭头时,页面似乎仍在内存中

时间:2019-05-13 19:45:27

标签: xamarin events navigation

我正在编写Xamarin应用。在App.Xaml.cs中,我公开了一些事件。 我设置了这样的主页:

var nav = new NavigationPage(new MainPage());
        MainPage = nav;

然后从主页推到另一页:

void DevicePictureBox_Click(object sender, EventArgs args)
    {
         Image imse = (Image)sender;
         String NameofDevice =                       
         devicesHandlesDictionary_byDevicepictureID[imse.Id].Name;

         var p = new DevicesPage(NameofDevice);

         Navigation.PushAsync(p);

DevicesPage订阅一个事件(从App公开)。 沿着代码设置一些Debug.WriteLine,我发现导航回MainPage时,DevicesPage仍处于活动状态(按向后箭头或使用Navigation.PopAsync())。 同样,当我再次导航到DevicesPage时,如果执行两次,代码将执行两次(“输出”窗口中的Degug.WriteLine字符串出现两次)和3、4、5等。似乎每次都会创建一个新页面,而前一个页面仍在后台运行。 我了解应该取消订阅事件(在这种情况下应在此处订阅)。同样令我困惑的是,该代码似乎仍在向后导航的页面中运行。如何删除页面?

1 个答案:

答案 0 :(得分:3)

  导航回MainPage时,

DevicesPage仍处于活动状态

仅仅因为您离开页面并不意味着您已经完成页面。您可能要稍后再使用。您可以根据需要明确清理它的资源(例如,取消订阅OnDisappearing中的事件处理程序),但这不会自动发生

  

似乎每次都会创建一个新页面

这样做是因为每次您显式创建DevicesPage的新实例

var p = new DevicesPage(NameofDevice);
Navigation.PushAsync(p);

没有什么可以阻止您保留对DevicesPage实例的引用并重新使用它,而不是总是创建一个新实例