結論: プレリリース版を入れよう
環境
Visual Studio 2017
Xamarin 4.3.0.784
Xamarin.Forms 2.3.3.193
Android 5.0
内容
MasterDetailPageを表示した状態で、バックキーを押すと以下の例外が表示されます。
03-15 23:46:54.359 I/MonoDroid( 3553): Java.Lang.IllegalStateException: Activity has been destroyed
03-15 23:46:54.359 I/MonoDroid( 3553): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/4009/f3074d2c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
…
03-15 23:46:54.359 I/MonoDroid( 3553): java.lang.IllegalStateException: Activity has been destroyed
03-15 23:46:54.359 I/MonoDroid( 3553): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1515)
03-15 23:46:54.359 I/MonoDroid( 3553): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638))
回避策
現段階(2017年3月16日)だと、修正された正式版のXamarin.Formsは公開されていないようです。
ただし、プレリリース版(2.3.4)では随分と前に修正されているので、NuGetからプレリリース版をインストールします。
- NuGetパッケージマネージャーを開きます
- プレリリースを含めるにチェックを入れます
- 「Xamarin.Forms」を探して選択します
- バージョンから2.3.3より新しいバージョン(画像だと2.3.4.214-pre5)を選択して、更新を押す
- クリーンを実行した後(重要)にビルドする。
リンク
46494 - Hardware/Software back button from MainPage of type MasterDetail causes crash 'java.lang.IllegalStateException: Activity has been destroyed'
https://bugzilla.xamarin.com/show_bug.cgi?id=46494