【问题标题】:Can SaveInstanceState be called before onCreate() was finished?可以在 onCreate() 完成之前调用 SaveInstanceState 吗?
【发布时间】:2016-08-01 09:12:23
【问题描述】:

如果这是一个愚蠢的问题,我很抱歉,我只是在生产中遇到了一个奇怪的行为,如果以某种方式调用了 onSaveInstanceState 但没有调用 onCreate(或者至少没有完成执行),可以解释这种行为。

代码如下:

private LaunchedFrom launchedFrom = null; 

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // some members initialization

  if (savedInstanceState == null) {
    Intent intent = getIntent();
    launchedFrom = handleIntentAction(intent);
  } else {
    // Restoring saved state.
  launchedFrom = LaunchedFrom.fromEvent(savedInstanceState.getString(BundleParams.KEY_LAUNCHED_FROM));
  }
}

protected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  outState.putString(BundleParams.KEY_LAUNCHED_FROM, launchedFrom.getEvent());
}

private LaunchedFrom handleIntentAction(Intent intent) {
  LaunchedFrom launchedFrom = LaunchedFrom.MAIN;
  if (intent != null) {
    // some logic to override launchedFrom
  }
  return launchedFrom;
}

我有时(很少)在onSaveInstanceState 中得到一个 NPE,它的 launchFrom.. 谢谢你的帮助。。

【问题讨论】:

  • 您能否通过代码详细说明您在 onSaveInstanceState 和 onCreate 以及 onRestoreInstanceSate 中与活动状态相关的操作
  • 我想这与垃圾收集有关。例如,在您将应用程序置于后台一段时间后,是否会引发 NPE
  • 我们有一个拥有大约一万个 DAU 的应用程序。这可能每天发生一次或两次。我不知道他们在做什么。我们可以忍受它,但它仍然让我很感兴趣。
  • 我偶然发现了一个类似的问题,我试图在 onSaveInstanceState 中访问的对象之一为 null 并给出 NPE,并且该对象在 onCreate 中初始化。我想不出在 onCreate 之前调用 onSaveInstanceState 的任何情况,也许是当应用程序崩溃时?
  • @rafaelc 你能详细说明一下这里的垃圾收集吗?你的理论听起来是对的,因为 crashlytics 确实提到大多数这些崩溃发生在设备处于后台时。

标签: android android-activity android-lifecycle


【解决方案1】:

根据Documentation

void onRestoreInstanceState (Bundle savedInstanceState)

此方法在 onStart() 和 onPostCreate(Bundle) 之间调用。

void onSaveInstanceState (Bundle outState)

如果调用,此方法将在 onStop() 之前发生。没有 保证它是在 onPause() 之前还是之后发生。

我希望这会有所帮助。虽然没有定义何时可以调用 onSaveInstanceState()。

【讨论】:

  • 引用文档的结论是什么?
  • 阅读以上关于 onSaveInstanceState 和 developer.android.com/reference/android/app/… 的配置更改的段落,阅读此链接以了解 onRestoreInstanceState developer.android.com/reference/android/app/…
  • 这甚至没有尝试回答问题:-(
  • @DavidWasser 在编辑上述问题之前,他问“是否以某种方式调用了 onSaveInstanceState 但 onCreate 没有(或至少没有完成执行)”我相应地回答了这个问题。
猜你喜欢
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
相关资源
最近更新 更多