Android 能否在onCreate()完成之前调用SaveInstanceState?

Android 能否在onCreate()完成之前调用SaveInstanceState?,android,android-activity,android-lifecycle,Android,Android Activity,Android Lifecycle,如果这是一个愚蠢的问题,我很抱歉,我只是在生产中有一个奇怪的行为,如果调用了onSaveInstanceState,但没有调用onCreate(或者至少没有完成执行),这可以解释 代码如下: private LaunchedFrom launchedFrom = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // some members i

如果这是一个愚蠢的问题,我很抱歉,我只是在生产中有一个奇怪的行为,如果调用了
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,它的启动为空。。 感谢您的帮助。

根据

在RestoreInstanceState(Bundle savedInstanceState)上无效

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

在SaveInstanceState上无效(束超出状态)

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

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

根据

在RestoreInstanceState(Bundle savedInstanceState)上无效

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

在SaveInstanceState上无效(束超出状态)

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



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

你能通过代码将你在onSaveInstanceState和onCreate以及OnRestoreInstanceState中所做的事情重新定义为活动状态吗?我想这与垃圾收集有关。。例如,在您将应用程序置于后台一段时间后,是否会引发此
NPE
?我们有一个应用程序具有约10000个DAU。这种情况可能每天发生一到两次。我不知道他们是干什么的。。我们可以接受它,但它仍然吸引着我。我有点偶然发现了一个类似的问题,在onSaveInstanceState中我试图访问的一个对象为null,并给出了一个NPE,而该对象是在onCreate中初始化的。我想不出在onCreate之前调用onSaveInstanceState的任何情况,也许是当应用程序崩溃时?@rafaelc你能在这里详细介绍一下garbaze集合吗?你的理论听起来不错,因为crashlytics确实提到大多数崩溃都发生在设备处于后台的情况下。你能通过代码将你在onSaveInstanceState、onCreate和OnRestoreInstanceState中所做的事情重新分配到活动状态吗?我想这与垃圾收集有关。。例如,在您将应用程序置于后台一段时间后,是否会引发此
NPE
?我们有一个应用程序具有约10000个DAU。这种情况可能每天发生一到两次。我不知道他们是干什么的。。我们可以接受它,但它仍然吸引着我。我有点偶然发现了一个类似的问题,在onSaveInstanceState中我试图访问的一个对象为null,并给出了一个NPE,而该对象是在onCreate中初始化的。我想不出在onCreate之前调用onSaveInstanceState的任何情况,也许是当应用程序崩溃时?@rafaelc你能在这里详细介绍一下garbaze集合吗?你的理论听起来很正确,因为crashlytics确实提到大多数崩溃发生在设备处于后台时。文档的这段引用得出了什么结论?阅读上面关于onSaveInstanceState的配置更改的段落,然后阅读onRestoreInstanceState的链接。这甚至没有试图回答以下问题:-(@DavidWasser在编辑上述问题之前,他问“是否调用了onSaveInstanceState,但onCreate没有(或者至少没有完成执行)”我相应地回答了这个问题。文档的这段引用得到了什么结论?阅读上面关于onSaveInstanceState的配置更改的段落,并阅读onRestoreInstanceState的此链接。这甚至没有试图回答以下问题:-(@DavidWasser在编辑上述问题之前,他问了“如果以某种方式调用了onSaveInstanceState,但onCreate没有(或者至少没有完成执行)”我相应地回答了这个问题。