React Native应用遭遇SuperNotCalledException崩溃求助
解决SuperNotCalledException崩溃问题
你遇到的问题根源是将super.onCreate(savedInstanceState)包裹在try-catch块中,当super.onCreate()抛出Fragment.InstantiationException被捕获后,Activity的初始化流程未完成,系统判定super.onCreate()未被正确调用,从而触发SuperNotCalledException。
修复方案
修改onCreate方法的异常处理逻辑,确保要么让super.onCreate()完整执行,要么在捕获异常后终止当前Activity生命周期,避免系统校验:
@Override protected void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); } catch (androidx.fragment.app.Fragment.InstantiationException e) { // 用Android日志替代System.out,便于调试排查 android.util.Log.e("MainActivity", "Error loading app from background", e); // 重启当前Activity,中断异常流程,避免系统触发SuperNotCalledException Intent intent = getIntent(); finish(); startActivity(intent); // 终止后续代码执行,防止未完成的初始化引发其他问题 return; } String rootDir = MMKV.initialize(this); new au.com.credsys.planability.RNDynamicSplash(this); if (isTablet()) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } }
额外说明
- 禁止将
super.onCreate()包裹在try-catch中,Android系统对Activity生命周期方法的调用完整性有严格校验,中断super.onCreate()的执行流程会触发系统级异常。 - 改用重启Activity的方式处理
Fragment.InstantiationException,既解决了后台唤醒时的崩溃问题,又符合Android生命周期规范。
内容的提问来源于stack exchange,提问作者Habib Rayhan
相关产品推荐
相关产品推荐

