2016-08-01 23 views
0

Es tut mir leid, wenn es eine dumme Frage ist, ich habe nur ein seltsames Verhalten in der Produktion, die erklärt werden kann, wenn onSaveInstanceState wurde aufgerufen, aber onCreate war nicht (oder zumindest nicht fertig ausgeführt). HierKann SaveInstanceState aufgerufen werden, bevor onCreate() beendet wurde?

ist der Code:

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; 
} 

Ich bin manchmal (ganz selten) bekommen eine NPE in onSaveInstanceState ein Null-launchedFrom mit .. Vielen Dank für Ihre Hilfe ..

+0

Können Sie nach Code codieren, was Sie in onSaveInstanceState und onCreate und onRestoreInstanceSate im Zusammenhang mit dem Status der Aktivität –

+0

Ich denke, es wird etwas mit Müll sammeln zu tun haben .. Ist diese 'NPE' nach dem Ablegen Ihrer App ausgelöst im Hintergrund zum Beispiel für eine Weile? – RafaelC

+0

Wir haben eine App mit ~ zehntausend DAUs. Dies geschieht vielleicht ein- oder zweimal am Tag. Ich weiß nicht, was sie tun. Wir können damit leben, aber es fasziniert mich immer noch. –

Antwort

-2

Wie Per Documentation

void onRestoreInstanceState (Bundle savedInstanceState)

Diese Methode wird zwischen onStart() und onPostCreate (Bundle) aufgerufen.

Leere onSaveInstanceState (Bundle outstate)

Wenn genannt, wird diese Methode vor OnStop auftreten(). Es gibt keine Garantien darüber, ob es vor oder nach onPause() auftreten wird.

Ich hoffe, das hilft. Es ist jedoch nicht definiert, wann onSaveInstanceState() aufgerufen werden kann.

+1

Zu welchem ​​Schluss kommt dieses Zitat der Dokumentation? – RafaelC

+0

Lesen Sie den obigen Abschnitt Konfigurationsänderungen für onSaveInstanceState und https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle), lesen Sie diesen Link für onRestoreInstanceState https: // Entwickler. android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle). – Ironman

+0

Dies versucht nicht einmal, die Frage zu beantworten :-( –