diff options
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla32898.cs')
-rw-r--r-- | Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla32898.cs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla32898.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla32898.cs new file mode 100644 index 00000000..ceb91e2b --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla32898.cs @@ -0,0 +1,74 @@ +using System; + +using Xamarin.Forms.CustomAttributes; +using System.Threading.Tasks; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls +{ + [Preserve (AllMembers = true)] + [Issue (IssueTracker.Bugzilla, 32898, "Memory leak when TabbedPage is popped out ")] + public class Bugzilla32898 : TestContentPage + { + WeakReference _page2Tracker; + WeakReference _tabTracker; + + protected override void Init () + { + var stack = new StackLayout () { VerticalOptions = LayoutOptions.Center }; + + stack.Children.Add (new Label () { + VerticalOptions = LayoutOptions.Center, + XAlign = TextAlignment.Center, + Text = "Page 1" + }); + + Content = stack; + } + + protected override async void OnAppearing () + { + base.OnAppearing (); + + if (_page2Tracker == null) { + var page2 = new TabbedPage () { Children = { new ContentPage () { Title = "tab" } } }; + page2.Appearing += async delegate { + await Task.Delay (1000); + await page2.Navigation.PopModalAsync (); + }; + + _page2Tracker = new WeakReference (page2, false); + _tabTracker = new WeakReference (page2.Children [0], false); + + await Task.Delay (1000); + await Navigation.PushModalAsync (page2); + + StartTrackPage2 (); + } + } + + async void StartTrackPage2 () + { + while (true) { + ((Label)((StackLayout)Content).Children [0]).Text = + $"Page1. But Page2 IsAlive = {_page2Tracker.IsAlive}, tab IsAlive = {_tabTracker.IsAlive}"; + + await Task.Delay (1000); + GC.Collect (); + } + } + + #if UITEST + [Test] + public async void Issu32898Test () + { + await Task.Delay (5000); + RunningApp.WaitForElement (q => q.Marked ("Page1. But Page2 IsAlive = False, tab IsAlive = False")); + } + #endif + } +} |