当前位置: 首页 > 知识库问答 >
问题:

我应该在onCreate或onRestoreInstanceState中恢复savedinstancestate吗?

东郭俊楠
2023-03-14

我有一个活动,它为结果启动了一些其他活动,所以当结果回来时,该活动可能已经或可能没有被销毁和重新创建。

我已经重写了onSaveInstanceState,以便添加需要保留和恢复的数据。

当活动被销毁并重新创建时,onCreate被传递给savedInstanceState包;但也调用并传递了相同的捆绑包onRestoreInstanceState()。

那么我应该把从捆绑包中提取数据并恢复状态的代码放在哪里?在onCreate还是在onRestoreInstanceState中?后者是否保证始终被调用?

是否可能在不调用onCreate的情况下调用onRestoreInstanceState?(例如,如果活动停止并重新启动,但未销毁并重新创建)?

共有2个答案

袁山
2023-03-14

Android在onStart()和onResume()生命周期方法之间调用onRestoreInstanceState()方法。因此,为了恢复活动的状态,只需实现onRestoreInstanceState()方法restore activity state。

谷彦君
2023-03-14

“您可以选择实现onRestoreInstanceState(),而不是在onCreate()期间还原状态,系统会在onStart()方法之后调用onRestoreInstanceState()。只有在有保存的状态要还原时,系统才会调用onRestoreInstanceState(),因此您无需检查捆绑包是否为NULL”

下面的链接非常清楚地解释了重启活动。

Android指南

 类似资料:
  • 所以我有一个我似乎无法解决的问题。我有一个ViewPager在我的一个活动中,比如MainActivity。我正在实现所有必要的方法,以保存和检索实例状态时,活动被取消在后台。但是当活动试图恢复它的状态时,片断会被恢复,但它们并没有附加到viewpager,所以我得到的只是一个白色屏幕。 下面是相关代码: mainactivity.java ViewPagerAdapter.java 因此,如果我

  • 我在获取活动状态时遇到问题。我有两个活动:主要活动和活动2。在MainActivity中,我放置了一个和一个name GO。在Activity2中,我有一个name。我想要的是:我把一个文本,例如:“abc”放入EditText,然后单击GO按钮。应用程序将导航到Activity2。之后,我点击按钮BackMainActivity,应用程序将导航到MainActivity,EditText中的数据

  • 问题内容: 我有一个要连接到MySQL数据库的应用程序。它在半夜断开连接,然后喷出有关连接的信息,并且JDBC在X秒内没有收到消息。 在进行任何需要与SQL Server通信的操作之前,我先打电话给我。 这是我的方法: 在该方法中,我将密码等信息放入字符串中,然后以标准JDBC方式创建连接。 然后我调用此方法: 我可以对这两种方法进行哪些更改以适应丢失的连接? 问题答案: 这不是检索连接的正确方法

  • 问题内容: 要使用Qt SDK在Linux中创建应用程序,应该在Linux中交叉编译应用程序还是在Windows中交叉编译应用程序? 问题答案: 您需要 在 Linux上 针对 Windows 进行交叉编译。 编辑: 在 Linux 上安装MinGW 。 *在 *Linux 上 交叉编译 您的Qt代码。应该生成Windows二进制文件( .exe )。 大功告成 使用Qt运行时库在任何Window

  • Firebase崩溃报告捕获的异常: 异常java.lang.运行时异常:无法启动活动ComponentInfo{com.talmir.mickinet/com.talmir.mickinet.activities.HomeActivity}:android.content.res.资源$NotFound异常:资源ID 0x7f080058android.app.ActivityThread.pe

  • 我仍在学习自动化测试,并且一直在研究一些测试框架。我发现有两种方法可以帮助人们启动WebDriver。 有些人在BeforeClass中启动它(使用TestNG),它使驱动程序在整个类测试中保持活动状态,包括许多测试用例 其他组在每个测试用例@test或@BeforeTest中启动WebDriver,以便它们可以为每个类创建新的WebDriver 我们需要在哪里启动WebDriver?非常感谢。