Expo SDK 53(53.0.16)Android端通知冷启动时启动屏图片不显示问题咨询
Expo SDK 53(53.0.16)Android端通知冷启动时启动屏图片不显示问题咨询
问题概述
我遇到了一个奇怪的启动屏异常:当Android应用处于完全关闭状态,通过推送通知冷启动时,启动屏的背景色能正常显示,但配置的启动屏图片却加载不出来;而直接点击应用图标正常启动时,图片显示完全正常。iOS端没有这个问题,所有启动场景下启动屏都能正常渲染。
当前app.json中expo-splash-screen插件配置
[ "expo-splash-screen", { "ios": { "backgroundColor": "#000000", "image": "./assets/images/splash-icon-light.png", "dark": { "image": "./assets/images/splash-icon-light.png", "backgroundColor": "#000000" }, "resizeMode": "contain", "imageWidth": 300 }, "android": { "backgroundColor": "#0000FF", "image": "./assets/images/splash-icon-light.png", "imageWidth": 250, "resizeMode": "contain" } } ]
已做的测试验证
- 分别在EAS构建的预览包和生产包中测试,问题均复现
- 测试时排除了Expo Go和dev-client,只针对正式构建的APK/AAB
- 尝试过调整
resizeMode为contain(当前已配置),但无法稳定解决问题 - 根据社区反馈和自己的排查,推测这是Expo Android端与通知冷启动相关的已知bug,核心应该是通知触发冷启动时,启动屏对应的Drawable资源加载逻辑出现了异常
想咨询的问题
1. 有没有可靠的临时解决方案?
这里有几个可以尝试的方向:
- 手动模拟启动屏:在App的根组件中,通过
useEffect结合expo-notifications的API判断是否是通过通知冷启动,如果是,则先渲染一个和官方启动屏样式完全一致的自定义组件,直到应用初始化完成再隐藏这个组件,替代原生启动屏的缺失。 - 修改Android原生启动屏资源:通过
eas build:configure生成Android原生项目代码,手动去res/drawable目录下修改启动屏相关的Drawable文件,确保通知启动场景下资源能被正确加载。修改后需要重新构建应用。 - 延迟通知路由处理:在推送通知的payload中添加一个标记,当应用冷启动时,先完成基础的启动流程(确保应用加载完成),延迟1-2秒再处理通知对应的路由跳转,给启动屏足够的加载时间。
2. 官方有没有修复这个问题的时间线?
目前这个问题属于Expo Android端的已知issue,官方团队一般会在后续的SDK小版本更新或者大版本迭代中修复,但暂时没有公开的明确时间线。建议你关注Expo的官方更新日志,或者在Expo社区论坛跟进相关讨论,获取修复进度的最新消息。
3. 有没有临时优化用户体验的方法?
- 统一视觉风格:如果图片暂时无法显示,可以调整启动屏背景色,让它和应用的主题色更贴近,减少用户的视觉落差。
- 添加加载状态提示:在启动屏背景上添加简单的文字提示(比如“正在启动,请稍候...”),让用户明确感知到应用正在加载,避免误以为应用卡住。
- 优化冷启动速度:尽量精简应用冷启动时的初始化任务,比如延迟非必要的第三方SDK初始化,加快应用加载完成的速度,缩短用户看不到启动屏图片的等待时长。
内容来源于stack exchange




