You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承BaseActivity时调用super.onCreate触发空指针异常求助

解决继承BaseActivity时super.onCreate处的空指针异常问题

咱们先拆解最关键的错误信息,直接定位问题根源:

java.lang.RuntimeException: 无法启动活动ComponentInfo{ com.abc.xyx/com.abc.xyx.actvities.SplashScreenActivity}: java.lang.NullPointerException: 尝试对空对象引用调用虚拟方法'void com.abc.xyx.DMCApplication.addActivity(android.app.Activity)'

这个空指针的核心原因很明确:调用super.onCreate()时,DMCApplication的实例还没被正确初始化,导致调用addActivity()方法时拿到的是null对象。下面给出针对性的排查和解决步骤:

1. 检查AndroidManifest.xml的Application配置

首先要确保你已经在Manifest中正确声明了自定义的DMCApplication类,否则系统会默认使用Application基类,自然拿不到你的自定义实现实例。

正确的配置格式如下:

<application
    android:name=".DMCApplication" <!-- 必须添加这一行,指定自定义Application -->
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    ...>
    <!-- 你的SplashScreenActivity等页面声明 -->
</application>

2. 修正BaseActivity中获取DMCApplication实例的方式

很多人会踩的坑是在Activity构造方法或者onCreate之前的阶段获取Application实例,这时候Activity还没和Application建立关联,getApplication()会返回null。

正确的做法是在super.onCreate()之后(或就在onCreate方法内),通过getApplication()获取实例:

public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 正确获取自定义Application实例
        DMCApplication appInstance = (DMCApplication) getApplication();
        // 加个非空判断,进一步避免空指针风险
        if (appInstance != null) {
            appInstance.addActivity(this);
        }
    }
}

3. 确认DMCApplication的基础实现正确

最后检查你的DMCApplication类,确保它正确继承自Application,并且addActivity方法的实现没有问题:

public class DMCApplication extends Application {
    private List<Activity> mActivityList = new ArrayList<>();

    @Override
    public void onCreate() {
        super.onCreate();
        // 这里可以做全局初始化,但不要放耗时操作,避免影响Activity启动
    }

    public void addActivity(Activity activity) {
        // 加双重判断,避免传入null或重复添加Activity
        if (activity != null && !mActivityList.contains(activity)) {
            mActivityList.add(activity);
        }
    }
}

按照这三步排查下来,基本就能解决这个空指针问题了。

内容的提问来源于stack exchange,提问作者user3140171

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:50:07