Android 12设备SplashScreen API崩溃问题排查求助
Android 应用Google Play上线后新SplashScreen API引发启动崩溃问题
问题情况
- 应用上线Google Play后,部分用户遭遇启动页崩溃,Crashlytics捕获到相关异常
- 已在API Level 12、13、14设备上测试,启动页功能正常,无法复现崩溃
崩溃详情
Fatal Exception: java.lang.NullPointerException Attempt to invoke virtual method 'android.view.View android.view.Window.peekDecorView()' on a null object reference android.app.ActivityThread.handleAttachSplashScreenView (ActivityThread.java:4634) android.app.servertransaction.TransferSplashScreenViewStateItem.execute(TransferSplashScreenViewStateItem.java:40) android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45) android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) android.app.ActivityThread$H.handleMessage(ActivityThread.java:2685) android.os.Handler.dispatchMessage(Handler.java:106) android.os.Looper.loopOnce(Looper.java:230) android.os.Looper.loop(Looper.java:319) android.app.ActivityThread.main(ActivityThread.java:8919) java.lang.reflect.Method.invoke(Method.java) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
排查与修复建议
- 规范SplashScreen初始化时机:确保在
Activity的onCreate方法中,先调用super.onCreate(savedInstanceState),再执行SplashScreen相关API,避免Window未初始化就操作 - 适配定制ROM差异:部分厂商定制ROM对SplashScreen逻辑有修改,可尝试在
AndroidManifest.xml中配置启动页属性时,保留旧版启动页的兼容逻辑 - 避免手动干预系统SplashView:不要在系统处理SplashScreen的生命周期阶段,手动调用移除或修改SplashView的方法,防止系统回调时出现空对象
- 升级Jetpack SplashScreen库:若使用的是Jetpack提供的SplashScreen库,检查并升级到最新稳定版本,部分旧版本存在已知空指针bug
- 添加空安全判断:在涉及
Window或SplashView操作的代码中增加空判断,示例:
if (getWindow() != null) { // 执行SplashScreen相关操作 }
内容的提问来源于stack exchange,提问作者user3048997
相关产品推荐
相关产品推荐

