Я знаю, этот вопрос задан раньше в stackoverflow, но ответы не работали для меня.onCreate (Bundle savedInstanceState) всегда всегда null
Вероятно, стоит отметить:
- Я использую ActionBarSherlock с пакетом поддержки.
- Способ
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
вызывается и OnCreate получает savedInstanceState = NULL
.
Выглядит хорошо, но как я могу это проверить? Как я могу запустить приложение kill/stop системой?Все, что я пробовал на телефоне Android, не вызывало onRestoreInstanceState. Кроме того, если это работает, как мне сохранить состояние, если пользователь останавливает/убивает это приложение сам? Мне кажется, что я могу использовать SharedPreferences, тогда ... – Almer
onSaveInstanceState используется для сохранения и восстановления состояния, которое было прервано системой (открытые диалоги, позиция списка и т. Д.). Если вы хотите сохранить часть своего состояния, которое должно быть сохранено при закрытии приложения или перезагрузке, вы должны пойти в SharedPreferences и сохранить состояние в onPause(). –
@DoctororDrive Ваша деятельность может быть вызвана дважды, так что у вас есть один экземпляр, работающий в фоновом режиме, готовый к восстановлению позднее, и один активный на переднем плане. Например, когда у вас есть Activity, который также отвечает на android.intent.action.CREATE_SHORTCUT. В этом случае действие для создания ярлыка выполняется на переднем плане и будет уничтожено до того, как фон снова появится на переднем плане, который может быть в нескольких положениях назад в стеке истории. В этом случае режим создания ярлыка заменит старые предпочтения старого. –