.NET MAUI通过Deep Link启动应用后的异常问题求助
.NET MAUI Android Deep Link 启动后页面跳转异常及崩溃问题解决
异常原因分析
- Activity多实例冲突:Deep Link默认会启动新的
MainActivity实例,导致应用同时存在多个Activity实例。切后台再恢复时,系统可能唤醒未登录状态的旧实例,从而出现跳回LoginPage的问题。多次重复操作后Activity栈彻底混乱,叠加资源泄漏触发崩溃。 - 相机资源未释放:PhotoPage未正确清理相机预览、相机对象等资源,重复进入页面后资源占用持续累积,最终因资源耗尽引发系统崩溃。
- 导航栈残留页面:登录后LoginPage仍保留在导航栈中,系统恢复页面时可能错误回退到该页面。
解决办法
1. 调整Activity启动模式
修改MainActivity的启动模式为SingleTask,确保Deep Link启动时复用已有Activity实例,避免多实例导致的栈混乱:
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTask, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] public class MainActivity : MauiAppCompatActivity { protected override void OnNewIntent(Intent intent) { base.OnNewIntent(intent); // 可在此处理后续Deep Link请求,避免重复初始化导航逻辑 } }
2. 清理登录后的导航栈
登录跳转时清除之前的LoginPage,确保导航栈中仅保留已登录后的页面:
// LoginPage中Login按钮点击事件 await Shell.Current.GoToAsync("//MenuPage", true); // 或使用参数明确移除前序页面 await Shell.Current.GoToAsync(nameof(MenuPage), new Dictionary<string, object>(), true);
3. 释放相机资源
在PhotoPage中重写OnDisappearing方法,主动清理相机资源:
protected override void OnDisappearing() { base.OnDisappearing(); // 停止预览并释放相机对象(根据你的相机实现调整) if (_cameraPreview != null) { _cameraPreview.StopPreview(); _cameraPreview.Dispose(); _cameraPreview = null; } }
4. 优化Deep Link处理逻辑
确保仅在应用首次启动时处理Deep Link跳转,后续的Deep Link请求避免重置导航状态,防止干扰已有的页面栈。
内容的提问来源于stack exchange,提问作者user28915544
相关产品推荐
相关产品推荐

