2016-08-01 2 views
0

Прошу прощения, если это глупый вопрос, у меня просто странное поведение в производстве, которое можно объяснить, если был вызван как-то onSaveInstanceState, но onCreate не был (или, по крайней мере, не закончил выполнение).Можно ли вызывать SaveInstanceState до завершения операции 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; 
} 

Я иногда (очень редко) получение NPE в onSaveInstanceState, имеющий нулевую launchedFrom .. Спасибо за вашу помощь ..

+0

Можете ли вы сложить по коду то, что вы делаете, в onSaveInstanceState и onCreate и onRestoreInstanceSate, выполненное в состоянии активности –

+0

Я предполагаю, что это будет связано с сбором мусора. Создается ли этот «NPE» после того, как вы положили приложение например, в фоновом режиме? – RafaelC

+0

У нас есть приложение с ~ десятью тысячами DAU. Это случается раз или два раза в день. Я не знаю, что они делают. Мы можем жить с ним, но меня это все еще интригует. –

ответ

-2

Как Per Documentation

void onRestoreInstanceState (Bundle savedInstanceState)

Этот метод вызывается между onStart() и onPostCreate (Bundle).

недействительного onSaveInstanceState (Пачка outState)

При вызове, этот метод будет происходить до OnStop(). Нет гарантии о том, произойдет ли это до или после onPause().

Надеюсь, это поможет. Хотя не определено, когда вызывается onSaveInstanceState().

+1

На каком основании получается цитата из документации? – RafaelC

+0

прочитайте абзац выше. Изменения конфигурации для onSaveInstanceState и https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle) прочитайте эту ссылку для onRestoreInstanceState https: // developer. android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle). – Ironman

+0

Это даже не пытается ответить на вопрос :-( –

Смежные вопросы