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

同一Activity多次触发Intent能否保留历史状态?测验类APP方案咨询

测验类APP答题状态存储方案解答

二维数组存储方案的可行性说明

你提到的String[][] States二维数组方案可以实现基础的状态存储需求,但存在以下明显缺陷:

  • 类型不安全:所有数值都转为String存储,后续读取需要频繁做类型转换,容易出现格式转换异常,也会增加冗余代码
  • 扩展性差:如果后续需要新增存储字段(例如作答时长、是否标记为难题等),二维数组结构无法灵活调整,改造成本很高
  • 可读性差:通过下标取值的方式,后续维护代码时很难快速对应不同下标代表的业务含义,容易写错下标导致逻辑bug

如果你的项目非常简单、后续完全没有迭代需求,该方案可以正常跑通,否则不推荐使用。

更推荐的实现方案

单次答题进程内存储(不需要跨重启留存记录)

自定义数据类封装答题状态,搭配List存储是更合理的方案,示例(Java环境):

// 定义答题状态实体类
public class AnswerState {
    private int questionIndex; // 对应你提到的Activity索引
    private int correctIndex; // 正确选项下标
    private int myChoice; // 用户选择的下标,未作答可设为-1标记

    // 按需添加构造方法、getter、setter即可
}

存储时直接初始化List即可:

List<AnswerState> answerStateList = new ArrayList<>();

该方案读写逻辑清晰,后续新增字段只需要在实体类中添加属性即可,完全兼容旧逻辑。

跨页面传递优化建议

你目前每次跳转同一个Activity加载新题,不需要每次都传递全量题目数组和状态,可选优化点:

  • 将全局题目列表、答题状态List存到自定义Application类或者单例管理类中,所有页面都可以直接读写,不需要每次通过Intent传递大量数据
  • 给启动Activity的Intent添加FLAG_ACTIVITY_SINGLE_TOP标记,配合onNewIntent方法接收新的题目加载请求,避免反复创建相同的Activity实例,降低内存消耗

你当前的传参代码可以简化为只传需要加载的题目下标:

intent.putExtra("currentQuestionIndex", 2);

用户返回之前的题目时,直接从状态列表中读取对应下标的myChoice值回填到页面即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:24:06