diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-08-02 14:57:08 -0600 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-08-02 13:57:08 -0700 |
commit | 3f88aebe22aaa0f8765648f15f1649c1a5ba2da4 (patch) | |
tree | 3d54cdb4a57137ff89cd3e4adcea37c023c9b98d /Xamarin.Forms.Controls.Issues | |
parent | 34048b7bb4e8bf55c712ffd92303cf260c491c0e (diff) | |
download | xamarin-forms-3f88aebe22aaa0f8765648f15f1649c1a5ba2da4.tar.gz xamarin-forms-3f88aebe22aaa0f8765648f15f1649c1a5ba2da4.tar.bz2 xamarin-forms-3f88aebe22aaa0f8765648f15f1649c1a5ba2da4.zip |
Dispose of child renderers in FrameRenderer (#265)
* Dispose of child renderers in FrameRenderer
* Add missing null check
Diffstat (limited to 'Xamarin.Forms.Controls.Issues')
2 files changed, 150 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs new file mode 100644 index 00000000..16cd3081 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42329.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using Xamarin.Forms.Controls.Issues; +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls +{ + [Preserve (AllMembers = true)] + [Issue (IssueTracker.Bugzilla, 42329, "ListView in Frame and FormsAppCompatActivity Memory Leak")] + public class Bugzilla42329 : TestMasterDetailPage + { + const string DestructorMessage = "ContentPageEx Destructor called"; + const string Page1Title = "Page1"; + const string Page2Title = "Page2"; + const string Page3Title = "Page3"; + + protected override void Init () + { + var masterPage = new MasterPage(); + Master = masterPage; + masterPage.ListView.ItemSelected += (sender, e) => + { + var item = e.SelectedItem as MasterPageItem; + if (item != null) + { + Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType)); + masterPage.ListView.SelectedItem = null; + IsPresented = false; + } + }; + + Detail = new NavigationPage(new _42329_FrameWithListView()); + } + + [Preserve(AllMembers = true)] + public class MasterPage : ContentPage + { + public MasterPage() + { + Title = "Menu"; + ListView = new ListView { VerticalOptions = LayoutOptions.FillAndExpand, SeparatorVisibility = SeparatorVisibility.None }; + + ListView.ItemTemplate = new DataTemplate(() => + { + var ic = new ImageCell(); + ic.SetBinding(TextCell.TextProperty, "Title"); + return ic; + }); + + Content = new StackLayout + { + Children = { ListView } + }; + + var masterPageItems = new List<MasterPageItem>(); + masterPageItems.Add(new MasterPageItem + { + Title = Page1Title, + TargetType = typeof(Bugzilla42329._42329_FrameWithListView) + }); + masterPageItems.Add(new MasterPageItem + { + Title = Page2Title, + TargetType = typeof(Bugzilla42329._42329_Page2) + }); + masterPageItems.Add(new MasterPageItem + { + Title = Page3Title, + TargetType = typeof(Bugzilla42329._42329_Page3) + }); + + ListView.ItemsSource = masterPageItems; + } + + public ListView ListView { get; } + } + + [Preserve(AllMembers = true)] + public class MasterPageItem + { + public string IconSource { get; set; } + + public Type TargetType { get; set; } + + public string Title { get; set; } + } + + [Preserve(AllMembers = true)] + public class ContentPageEx : ContentPage + { + ~ContentPageEx() + { + Log.Warning("Bugzilla42329", DestructorMessage); + } + } + + [Preserve(AllMembers = true)] + public class _42329_FrameWithListView : ContentPageEx + { + public _42329_FrameWithListView() + { + var lv = new ListView(); + var label = new Label(); + var frame = new Frame { Content = lv }; + + Title = Page1Title; + Content = new StackLayout + { + Children = { new Label { Text = "Open the drawer menu and select Page2" }, frame } + }; + } + } + + [Preserve(AllMembers = true)] + public class _42329_Page2 : ContentPage + { + public _42329_Page2() + { + Title = Page2Title; + Content = new StackLayout { Children = { new Label { Text = "Open the drawer menu and select Page3" } } }; + } + } + + [Preserve(AllMembers = true)] + public class _42329_Page3 : ContentPage + { + public _42329_Page3() + { + Title = Page3Title; + Content = new StackLayout { Children = { new Label { Text = $"The console should have displayed the text '{DestructorMessage}' at least once. If not, this test has failed." } } }; + } + + protected override void OnAppearing() + { + base.OnAppearing(); + GC.Collect(); + GC.Collect(); + GC.Collect(); + } + } + } +}
\ 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 a98b97dc..1e3e9f34 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 @@ -117,6 +117,7 @@ </Compile> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42074.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42075.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42329.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" /> |