Xamarin.Forms Android:休眠后点击退出按钮应用因闪屏重启
Xamarin.Forms.Android 休眠后退出重启问题解决方案
问题根源
核心问题出在闪屏Activity的启动模式或生命周期处理不当,导致设备休眠后退出主应用时,系统重新拉起闪屏页,引发应用自动重启。
具体修复步骤
1. 调整闪屏Activity配置
修改闪屏Activity的[Activity]特性,设置正确的启动模式和历史记录属性,避免闪屏页留在返回栈或重复实例化:
[Activity(Label = "你的应用名", Icon = "@mipmap/icon", Theme = "@style/SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, NoHistory = true)] public class SplashActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 跳转到主页面后立即结束闪屏页 StartActivity(new Intent(this, typeof(MainActivity))); Finish(); } }
2. 修正退出应用的代码
放弃强制终止进程的JavaSystem.Exit(0),改用Android原生的Activity结束逻辑,保证应用正常退出:
// 在共享项目的退出按钮命令中 if (Device.RuntimePlatform == Device.Android) { var currentActivity = Android.App.Application.Context.GetActivity() as MainActivity; currentActivity?.FinishAffinity(); // 结束当前任务栈内所有关联Activity // 可选:若需彻底终止进程,可添加以下代码(不推荐强制终止,优先让系统自然回收) // Android.OS.Process.KillProcess(Android.OS.Process.MyPid()); }
同时确保MainActivity的启动模式合理(默认配置即可,若有需求可设为SingleTask):
[Activity(Label = "你的应用名", Icon = "@mipmap/icon", Theme = "@style/MainTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)] public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity { // ... 原有业务代码 }
3. 优化休眠恢复后的生命周期处理
在闪屏Activity中重写OnResume方法,避免休眠恢复时重复启动页面:
protected override void OnResume() { base.OnResume(); // 检查是否已有MainActivity在运行,避免重复跳转 var mainActivityExists = Android.App.Application.Context.GetActivity() is MainActivity; if (mainActivityExists) { Finish(); return; } // 原有跳转逻辑 StartActivity(new Intent(this, typeof(MainActivity))); Finish(); }
4. 真机验证
优先使用真机测试(模拟器存在系统行为差异),验证流程:
- 启动应用进入主页面
- 让设备进入休眠模式
- 唤醒设备后点击退出按钮
- 确认应用正常关闭,无自动重启现象
内容的提问来源于stack exchange,提问作者Shan
相关产品推荐
相关产品推荐

