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

添加Retrofit功能后Android应用启动崩溃,如何排查定位问题?

问题根因分析

从崩溃栈可以直接定位核心错误:你在MainActivity的类实例初始化阶段(也就是onCreate()生命周期执行之前)就调用了需要系统服务上下文的API,具体是MainActivity.java第56行的getSystemService()调用。Activity在onCreate()执行完成前还没有绑定到系统服务上下文,此时调用系统服务相关API就会直接抛出该异常。
这是Android开发新手非常常见的生命周期误用错误,大概率是你把需要上下文初始化的代码(比如传感器初始化、Retrofit相关的上下文依赖初始化、布局相关服务调用)直接写在了Activity的成员变量初始化位置,或者构造方法里,没有放到onCreate()方法中执行。

修复方案

  1. 打开MainActivity.java文件,找到第56行的代码
  2. 把这行代码以及所有依赖它的初始化逻辑,整体移动到onCreate()方法里,且要放在super.onCreate(savedInstanceState)调用之后执行
    如果你的Retrofit初始化逻辑中用到了Context(比如读取本地配置、设置缓存目录等),同样不能在Activity成员变量初始化阶段执行,必须放到onCreate()中执行。

常见错误写法和正确写法对比

错误写法(直接作为成员变量初始化)

public class MainActivity extends AppCompatActivity {
    // 错误:初始化时调用getSystemService,此时还没执行onCreate
    SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

正确写法(放到onCreate里初始化)

public class MainActivity extends AppCompatActivity {
    SensorManager sensorManager;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 正确:super.onCreate执行完成后再调用系统服务API
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    }
}

进一步排查需要提供的信息

  • MainActivity.java的完整代码
  • 你新增的Retrofit配置相关代码
  • 新建的接收Retrofit返回结果的Activity的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:04