OnCreate (Bundle savedInstanceState) всегда имеет значение null

Я знаю, этот вопрос задан раньше в stackoverflow, но ответы не работали для меня.

Вероятно, стоит упомянуть:

  • Я использую ActionBarSherlock с пакетом поддержки.
  • Метод onSaveInstanceState IS onSaveInstanceState при нажатии кнопки «домой». Метод onCreate всегда дает NULL для Bundle savedInstanceState .
  • Метод onRestoreInstanceState никогда не вызывается вообще. (Я бы не прочь, если работал onCreate ;)).
  • Также (это не должно иметь значения) Я попытался поставить super.onSaveInstanceState(outState) в нижней части onSaveInstanceState . Не повезло.

Вот код. Надеюсь, у кого-то была эта проблема и она была решена.

 public class MainActivity extends SherlockFragmentActivity { private static final String LOG_TAG = MainActivity.class.getSimpleName(); private static String STATE_TO_STORE = "state_to_store"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(LOG_TAG, "onCreate: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL")); // ... more code... } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.d(LOG_TAG, "onRestoreInstanceState: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL")); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(STATE_TO_STORE, 5); // store some int Log.d(LOG_TAG, "onSaveInstanceState bundle: " + outState.toString()); } // ... more code ... } 

В onSaveInstanceState четко указывается, что onSaveInstanceState вызывается и onCreate получает savedInstanceState = NULL .

    Убедитесь, что ваш манифест не содержит андроида: noHistory = "true".

    Я часами искал ответа, и все было так просто.

    В моем случае причина заключалась в том, что в конкретном действии не было темы, объявленной в файле манифеста.

    Чтобы исправить это, откройте AndroidManifest.xml, нажмите «Приложение», выберите аварийную активность в «Узлах приложений» и добавьте тему в поле «Тема» атрибутов. В моем случае это было

     @style/Theme.AppCompat.Light.DarkActionBar 

    Но вы можете скопировать тему из одного из ваших других видов деятельности.

    PS: Я знаю, что это ответ на старый вопрос, но я наткнулся на него во время поиска исправления и не нашел рабочего решения, чтобы это могло помочь другим.

    Когда вы нажимаете кнопку HOME, ваша активность приостанавливается и не разрушается. Когда вы снова запускаете приложение с главного экрана, onCreate не вызывается, если ОС не уничтожит ваше приложение для восстановления памяти. Если вы хотите, чтобы ваша деятельность была воссоздана при запуске с android:finishOnTaskLaunch="true" экрана, поместите эту строку android:finishOnTaskLaunch="true" в манифест активности.

    OnRestoreInstanceState (или сохраненный пакет в onCreate) будет запущен, когда активность будет убита системой из-за нехватки ресурсов и перезапустится, когда вы вернетесь к ней. Активность не может быть убита (просто остановлена) и перезапущена, не пройдя onRestoreInstanceState. Другими словами, onSaveInstanceState будет всегда вызываться, но onRestoreInstanceState будет вызываться, если он будет убит и восстановлен системой. Не просто остановился и перезапустился, не приостановился и не возобновился, а не начинался с нового намерения.

    Проверьте мое объяснение здесь. Я уверен, что он охватывает ваш вопрос.

    Когда вызывается onRestoreInstanceState?