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

Android Java中带SurfaceView的两个Activity传值崩溃问题

解决SurfaceView Activity间传值崩溃的问题

看来你碰到了个典型的Android开发坑——没加Intent数据读取逻辑时一切正常,一加就崩溃,还是两个SurfaceView类型的Activity。结合你的场景,我整理了几个最可能的原因和对应的解决步骤:

1. 先检查score1的类型是否支持序列化

Intent的putExtra()要求传递的对象必须是可序列化的,比如基本类型、String,或者实现了Serializable/Parcelable接口的自定义类。如果score1是自定义类型但没做序列化处理,传递时不会立刻报错,但第二个Activity读取时就会直接崩溃。

  • 快速验证&解决:
    • 如果score1是int、float这类基本类型或String,直接跳过这步;
    • 如果是自定义类,先给它加上Serializable接口(最简单的验证方式):
      public class YourScoreClass implements Serializable {
          // 你的类成员和方法
      }
      
    • 要是追求性能,也可以用Android推荐的Parcelable接口,但Serializable足够快速定位问题。

2. 排查第二个Activity的读取代码是否有误

崩溃大概率出在读取Intent数据的环节,比如类型不匹配、没做空判断,这些都是新手常踩的坑。

给你一个安全的读取示例,避免空指针和类型错误:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // 先判断Intent是否存在,防止意外为空
    if (getIntent() != null) {
        // 根据score1的实际类型选择对应的get方法
        // 如果是int类型:
        int receivedScore = getIntent().getIntExtra("score_var", 0); // 第二个参数是默认值,没传值时不会崩
        // 如果是String:
        // String receivedScore = getIntent().getStringExtra("score_var");
        // 如果是自定义序列化类:
        // YourScoreClass receivedScore = (YourScoreClass) getIntent().getSerializableExtra("score_var");
    }
    
    // 再去初始化SurfaceView相关逻辑...
}

常见错误点:

  • 用错了get方法:比如传的是int,却调用getStringExtra();
  • 没加默认值,Intent意外为空时直接触发空指针;
  • 自定义类强转时出错(比如没实现序列化就强转)。

3. 避免SurfaceView初始化和Intent读取的时机冲突

因为两个Activity都是SurfaceView,第二个Activity的SurfaceView回调(比如surfaceCreated())可能比Intent读取的时机更早,要是你在回调里直接读取Intent,就可能拿到空值或者未初始化的数据导致崩溃。

解决办法:

  • 优先在onCreate()里读完Intent数据,把值存为Activity的成员变量;
  • 之后在SurfaceView的回调逻辑里,直接使用这个提前存好的成员变量,而不是在回调里再去读Intent。

4. 一定要看LogCat的崩溃日志!

这是最快定位问题的办法!打开Android Studio的LogCat,过滤Error级别,找到崩溃的栈信息——比如是ClassCastException(类型转换错)、NullPointerException(Intent为空)还是NotSerializableException(对象不可序列化),根据日志能直接锁定问题根源。


内容的提问来源于stack exchange,提问作者André Castro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:10