【发布时间】: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