diff options
3 files changed, 41 insertions, 5 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla46494.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla46494.cs new file mode 100644 index 00000000..bdb24150 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla46494.cs @@ -0,0 +1,36 @@ +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, 46494, "Hardware/Software back button from MainPage of type MasterDetail causes crash 'java.lang.IllegalStateException: Activity has been destroyed'", PlatformAffected.Android)] + public class Bugzilla46494 : TestMasterDetailPage + { + protected override void Init() + { + Master = new ContentPage { Title = "Master", BackgroundColor = Color.Blue }; + Detail = new NavigationPage( + new ContentPage + { + Title = "Detail", + BackgroundColor = Color.Red, + Content = new ContentView + { + Content = new Label + { + Text = "Hit Back button to destroy Activity. Disposing Fragment should not run into a race condition with Activity destroy.", + HorizontalTextAlignment = TextAlignment.Center, + VerticalTextAlignment = TextAlignment.Center + } + } + } + ); + } + } +}
\ 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 fb70cf67..dc1e6040 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 @@ -136,6 +136,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla44044.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla44338.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla45743.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla46494.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" /> diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs index 35ddf2da..2fe5d5d9 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs @@ -185,15 +185,14 @@ namespace Xamarin.Forms.Platform.Android protected override void OnDestroy() { - // may never be called - base.OnDestroy(); - MessagingCenter.Unsubscribe<Page, AlertArguments>(this, Page.AlertSignalName); MessagingCenter.Unsubscribe<Page, bool>(this, Page.BusySetSignalName); MessagingCenter.Unsubscribe<Page, ActionSheetArguments>(this, Page.ActionSheetSignalName); - if (_platform != null) - _platform.Dispose(); + _platform?.Dispose(); + + // call at the end to avoid race conditions with Platform dispose + base.OnDestroy(); } protected override void OnNewIntent(Intent intent) |