Xamarin.Android实现的Launcher应用OnDestroy方法被两次触发问题求助
问题根因
这个现象是Android系统配置变更触发的默认Activity销毁重建逻辑导致的:Google Maps开启导航时通常会触发屏幕方向变更、屏幕尺寸变更、UI模式变更等系统配置变化,若Launcher的MainActivity未配置对应配置变更的自行处理权限,系统会自动销毁并重建Activity。两次触发重启是导航切换阶段先后触发了两个不同的配置变更事件导致的。
解决方案
按以下步骤修改即可避免该问题:
- 修改MainActivity的配置,声明需自行处理的配置变更项,避免系统触发销毁重建
有两种修改方式可选:- 直接修改
AndroidManifest.xml,在MainActivity对应的<activity>节点添加android:configChanges属性:
<activity android:name=".MainActivity" android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|uiMode|keyboard|keyboardHidden|navigation" <!-- 其余原有配置保持不变 --> >- 若你使用Xamarin.Android的ActivityAttribute声明Activity配置,直接修改MainActivity类的Attribute即可:
[Activity( Label = "你的Launcher名称", MainLauncher = true, ConfigChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.SmallestScreenSize | ConfigChanges.ScreenLayout | ConfigChanges.UiMode | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.Navigation )] public class MainActivity : Activity { // 其余原有代码保持不变 } - 直接修改
- 重写MainActivity的
OnConfigurationChanged方法,若无需对配置变更做特殊业务处理,直接调用父类方法即可:public override void OnConfigurationChanged(Configuration newConfig) { base.OnConfigurationChanged(newConfig); } - 额外检查:确认设备开发者选项中的不保留活动开关处于关闭状态,该开关会强制销毁所有离开前台的Activity,也会触发同类异常。
验证方法
修改完成后重新以调试模式运行应用,重复原复现步骤,不会再命中OnDestroy断点,Launcher不会出现重启现象。
内容的提问来源于stack exchange,提问作者khatauli
相关产品推荐
相关产品推荐

