Android启动页Splash Screen结束后Main Activity不启动且应用闪退无报错
问题复现背景
闪屏页(Splash Activity)展示结束跳转主页面(Main Activity)时无明确报错直接闪退,Splash Activity代码如下:
package com.example.collegematch; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); getSupportActionBar().hide(); Thread thread = new Thread(){ public void run(){ try { sleep(2000); } catch (Exception e) { e.printStackTrace(); } finally { Intent intent = new Intent(SplashActivity.this , MainActivity.class); startActivity(intent); finish(); } } }; thread.start(); } }
排查&修复方案
- 第一步:校验
AndroidManifest.xml配置
确认配置文件中已正确注册MainActivity,且SplashActivity已被设置为启动入口。若MainActivity未注册、类名/包名拼写错误,都会导致跳转时直接闪退。正确的注册示例如下:
注意targetSdkVersion≥31时,四大组件必须显式声明<activity android:name=".MainActivity" android:exported="true" /> <activity android:name=".SplashActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>android:exported属性,漏加也会导致崩溃。 - 第二步:优化闪屏页跳转逻辑
现有子线程sleep的实现方式不够稳定,推荐使用Handler的postDelayed实现延时跳转,同时确保跳转逻辑在主线程执行,修改后的Splash Activity代码如下:
额外加了getSupportActionBar的非空判断,避免部分主题场景下空指针崩溃。package com.example.collegematch; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); if (getSupportActionBar() != null) { getSupportActionBar().hide(); } new Handler(Looper.getMainLooper()).postDelayed(() -> { Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); finish(); }, 2000); } } - 第三步:排查MainActivity自身逻辑
80%以上的这类跳转闪退问题根源在MainActivity本身,你可以先注释掉MainActivity onCreate方法内的所有自定义逻辑,只保留最简代码测试:
如果修改后不再闪退,就逐行恢复你原来的MainActivity代码,定位是哪一行逻辑触发的崩溃,常见原因包括:布局文件资源引用错误、空指针调用、权限未提前申请就调用相关API、主题属性不兼容等。@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 先设置一个最简单的空白布局测试 setContentView(android.R.layout.simple_list_item_1); } - 第四步:查看完整崩溃日志
打开Android Studio的Logcat面板,过滤规则选择No Filters,日志级别选择Error,在应用闪退时搜索AndroidRuntime关键字,就能看到完整的崩溃堆栈信息,直接定位崩溃的具体代码位置。
内容的提问来源于stack exchange,提问作者Grv
相关产品推荐
相关产品推荐

