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

拆分MainActivity代码后传递Context获取系统服务崩溃的正确方式

解决"System services not available to Activities before onCreate()"崩溃问题

嘿,这个崩溃的原因其实很明确——你踩了一个Android开发里的常见小坑:

你把Static类继承了AppCompatActivity,但你只是用new Static()手动创建了它的实例,这个类根本没经过Android系统的Activity生命周期流程(比如onCreate方法完全没被系统调用)。而Activity只有在系统完成初始化后才能获取系统服务,所以当你调用它的getSystemService时,就会抛出那个错误。

更关键的是:这个工具类根本不需要继承Activity! 我们只需要用传入的Context来获取系统服务就够了。

正确的修改方案

首先,把你的工具类改成普通类(不要继承任何Activity相关类),并且建议改成有意义的名字(比如NetworkUtils,避免和Java关键字static混淆):

public class NetworkUtils {
    // 改成静态方法,不用创建实例就能调用
    public static boolean isNetworkAvailable(Context context) {
        // 直接用传入的Context获取系统服务
        ConnectivityManager connectivityManager = 
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        // 简化判断逻辑,同时检查网络是否真的处于连接状态
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

    // 把你的setData方法也放在这里,按需调整参数
    public static void setData(String response) {
        // 这里实现你的数据处理逻辑
    }
}

然后修改MainActivity里的调用代码,直接使用静态方法,不用创建工具类实例:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        getData("2B1A4D3C");
    }

    public void getData(String Hex) {
        // 直接传入MainActivity的Context即可
        if (NetworkUtils.isNetworkAvailable(this)) {
            // 这里注意response变量需要你提前定义好(比如从接口请求获取)
            NetworkUtils.setData(response);
        }
    }
}

额外注意事项

  • 别忘了在AndroidManifest.xml中添加网络状态权限:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 工具类用静态方法可以避免不必要的对象实例化,更符合工具类的设计原则
  • 从Android 10(API 29)开始,部分网络状态的获取有更严格的限制,但基础的网络可用性检查用上面的方法完全没问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:36:38