MAUI Blazor(.NET 8)を使って開発しているAndroidアプリを再開したときにスプラッシュ画面でハングしてアプリが再開できない困った問題に遭遇したので、その解決策についての備忘録。
MAUI Blazorの新規作成プロジェクトでも発生していたので、ちょっと焦りました…。
問題
MAUI Blazor(.NET 8)のAndroidアプリをAndroid 11以前の実機で起動してからナビゲーションバーの戻るボタンでバックグラウンドにすると、タスクマネージャーで再開したときにスプラッシュ画面でハングしてアプリを再開できない。
原因
BlazorWebViewの非同期のDispose処理を同期処理上で行っていることでスレッドのデッドロックが発生する模様(MAUI Blazorの不具合)。
対応
MauiProgram.cs
でBlazorWebViewの非同期のDispose処理を待たないようにするオプションスイッチを設定する。
AppContext.SetSwitch("BlazorWebView.FireAndForgetAsync", isEnabled: true);
但し、このプションを設定すると非同期のDispose処理が完了する前(クリーンアップ処理が不完全な状態)にアプリが起動される可能性があるので注意が必要とのことです(詳細については参考ウェブサイトのGitHubのコミットを参照)。
参考ウェブサイトなど
- GitHub
Add switch to BlazorWebView to configure ‘fire and forget’ for Android Disposal #22496
以上です。