Android Navigation Component导航跳转新页面首次安装出现白屏问题
你提供的导航配置代码本身语法符合Jetpack Navigation Component规范,无配置项错误,可按照以下方向排查白屏问题:
数据时序问题
首次安装应用时,PersonalInfoFragment视图渲染依赖的全局数据(如用户信息、配置缓存等)还未完成持久化写入,导致视图初始化逻辑报错、渲染中断;重启应用后相关缓存已经生成,所以功能恢复正常。
修复方案:- 跳转前先校验必要数据是否就绪,再执行导航操作
// ProfileFragment 跳转逻辑示例 if (UserGlobalCache.isPersonalInfoReady()) { findNavController().navigate(R.id.navigate_profileFragment_to_personalInfoFragment) } else { // 展示加载态,等待数据写入完成后再触发跳转 }- 将
PersonalInfoFragment中依赖全局数据的视图初始化逻辑从onCreateView移到onViewCreated中,增加空数据兼容逻辑。
混淆导致的Fragment初始化异常
开启ProGuard/R8混淆后,PersonalInfoFragment的空构造方法被移除,首次导航时反射创建Fragment实例失败,重启后类加载缓存已经生成,所以实例化正常。
修复方案:给PersonalInfoFragment类添加@Keep注解,避免混淆时移除空构造方法和必要的类信息。Navigation组件版本bug
2.4.0版本以下的Navigation Component存在偶现的目标Fragment懒加载初始化失败问题,首次加载导航图时无法正确实例化目标Fragment。
修复方案:将项目依赖的Navigation版本升级到2.4.0及以上的稳定版。视图绘制时序问题
PersonalInfoFragment的根布局如果设置了透明背景、或者存在merge标签误用的情况,首次渲染时系统绘制优先级异常导致没有正常绘制视图,重启后绘制时序恢复正常所以显示正常。
修复方案:给根布局设置明确的非透明背景色,避免在onCreateView中执行耗时的视图初始化操作,耗时逻辑移到onViewCreated之后的异步任务中执行。
内容的提问来源于stack exchange,提问作者Prince Patel

