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没有(或者至少没有完成执行)”我相应地回答了这个问题。