Android 导航栏 隐藏显示状态改变后引起的闪退问题记录

1,286 阅读1分钟

现象:

  • 机型 华为P10 华为机型可以设置底部虚拟按键(即底部导航栏,且其导航栏还存在隐藏按键)
  • 两个 A_Activity 和 B_Activity,在Activity中显示导航栏,然后进入B_Activity。在B_Activity中隐藏导航栏后finish,此时会出现闪退。查看log日志,无error异常抛出。

定位问题:

  • 在error级的log无法定位问题后,切换到warn,发现如下报错: 其关键 updateSurfaceStatusWindowStateAnimator
Exception thrown when updateSurfaceStatusWindowStateAnimator{62aa4ae cn.fmsyjhgb/cn.fmgbdt.activitys.broadcast.RadioListActivity}: android.os.DeadObjectException
  • 由此明白大致因为是动画引起

解决方法:

  • 在AndroidManifest 的Activity设置如下属性
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"
  • 然后在Activity 中重写onConfigurationChanged() 方法:
    /**
     * onConfigurationChanged事件并不是只有屏幕方向改变才可以触发,其他的一些系统设置改变也可以触发,比如打开或者隐藏键盘
     * @param newConfig
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
       PrintLogUtil.log("<<onConfigurationChanged>>");
    }

参考: blog.csdn.net/lkk79047014…