diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-08-30 11:57:55 -0600 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-08-30 10:57:55 -0700 |
commit | 974705b9a920e71ecaa9f5e0d58cf6d80a1d71cf (patch) | |
tree | caa8ac25f603ee796f455846e615011afb9b702a /Xamarin.Forms.Controls.Issues | |
parent | a0dae2d111a5fc59a272f5b8a27885a54dcf6f32 (diff) | |
download | xamarin-forms-974705b9a920e71ecaa9f5e0d58cf6d80a1d71cf.tar.gz xamarin-forms-974705b9a920e71ecaa9f5e0d58cf6d80a1d71cf.tar.bz2 xamarin-forms-974705b9a920e71ecaa9f5e0d58cf6d80a1d71cf.zip |
Fix memory leak caused by BaseCellView and RendererHolder (#311)
Diffstat (limited to 'Xamarin.Forms.Controls.Issues')
2 files changed, 91 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla35132.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla35132.cs new file mode 100644 index 00000000..917c608c --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla35132.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading; +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 35132, "Pages are not collected when using a Navigationpage (FormsApplicationActivity)")] + public class Bugzilla35132 : TestNavigationPage + { + protected override void Init() + { + PushAsync(new RootPage()); + } + + [Preserve(AllMembers = true)] + public class BugPage : ContentPage + { + public static int Livecount; + + public BugPage(IEnumerable<string> items) + { + Interlocked.Increment(ref Livecount); + + Content = new StackLayout + { + Children = + { + new Label { Text = items.Count() < 3 ? "Running" : Livecount < 3 ? "Success" : "Failure" }, + new ListView { ItemsSource = items } + } + }; + } + + ~BugPage() + { + Debug.WriteLine(">>>>>>>> BugPage Finalized"); + Interlocked.Decrement(ref Livecount); + } + } + + [Preserve(AllMembers = true)] + public class RootPage : ContentPage + { + readonly List<string> _items = new List<string>(); + + public RootPage() + { + var button = new Button { Text = "Open" }; + button.Clicked += Button_Clicked; + Content = button; + } + + async void Button_Clicked(object sender, EventArgs e) + { + Debug.WriteLine(">>>>>>>> Invoking Garbage Collector"); + GC.Collect(); + GC.WaitForPendingFinalizers(); + + _items.Add((BugPage.Livecount).ToString()); + await Navigation.PushAsync(new BugPage(_items)); + } + } + +#if UITEST + [Test] + public void Issue1Test () + { + RunningApp.WaitForElement (q => q.Marked ("Open")); + RunningApp.Tap(q => q.Marked ("Open")); + RunningApp.Back(); + RunningApp.WaitForElement (q => q.Marked ("Open")); + RunningApp.Tap(q => q.Marked ("Open")); + RunningApp.Back(); + RunningApp.WaitForElement (q => q.Marked ("Open")); + RunningApp.Tap(q => q.Marked ("Open")); + RunningApp.WaitForElement (q => q.Marked ("Success")); + } +#endif + } +}
\ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 88cfb0bd..7a46c880 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -62,6 +62,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34007.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla35078.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla35127.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla35132.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla35157.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla35294.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla35472.cs" /> |