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

从Display Activity返回Main Activity后数据丢失,如何恢复而非重启?

问题分析与解决办法

不需要替换startActivity(intent1)方法,你的问题本质是MainActivity被系统销毁重建,而非正常从后台恢复。以下是具体排查和解决方向:

  • 检查启动模式配置
    打开AndroidManifest.xml,确认MainActivity的launchMode是默认的standard(不要设为singleInstance或singleTask,除非有特殊业务需求)。正确配置示例:

    <activity
        android:name=".MainActivity"
        android:launchMode="standard">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
  • 处理配置变更引发的重建
    如果你的App允许横竖屏切换等配置变更,系统会自动销毁并重建Activity。可以通过两种方式解决:

    1. 在Manifest中给MainActivity添加属性,禁止因配置变更重建:
      <activity
          android:name=".MainActivity"
          android:configChanges="orientation|screenSize|keyboardHidden">
      </activity>
      
    2. 重写生命周期方法,手动保存和恢复数据:
      @Override
      protected void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
          // 保存输入的姓名
          outState.putString("saved_name", editTextName.getText().toString());
          // 保存按钮文本状态
          outState.putString("btn_text", buttonSwitch.getText().toString());
      }
      
      @Override
      protected void onRestoreInstanceState(Bundle savedInstanceState) {
          super.onRestoreInstanceState(savedInstanceState);
          // 恢复输入内容
          String name = savedInstanceState.getString("saved_name");
          if (name != null) editTextName.setText(name);
          // 恢复按钮文本
          String btnText = savedInstanceState.getString("btn_text");
          if (btnText != null) buttonSwitch.setText(btnText);
      }
      
  • 排查是否手动finish了MainActivity
    跳转前如果调用了finish()方法,会直接销毁MainActivity,返回时系统只能重新创建它。检查跳转代码,把finish()删掉即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:40:14