Я пытаюсь восстановить свое приложение после того, как оно было убито в фоновом режиме. Он всегда падает при попытке доступа к переменной «config», потому что она равна нулю, даже после того, как она была сохранена в onSaveInstanceState (это всегда так, я тестировал ее в режиме отладки, и вне состояния имеет объект внутри своей карты).
Что меня действительно смущает, так это то, что это отлично работает в случае вращения. Так что я думаю, что нет ничего плохого в том, чтобы построить объект из посылки. Это просто не работает, когда я закрываю приложение в фоновом режиме.
Когда я регистрирую saveInstanceState в onCreate после того, как я убиваю приложение в фоновом режиме, Config.BUNDLE возвращает null = null (без ключа, без значения), но Account.BUNDLE, который является аналогичным объектом, не поврежден.
Кроме того, я попытался добавить еще один объект String в saveInstanceState, и он также сохраняется правильно.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
Config config = savedInstanceState.getParcelable(Config.BUNDLE);
Config.setInstance(config);
Account account = savedInstanceState.getParcelable(Account.BUNDLE);
Account.setInstance(account);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(Config.BUNDLE, Config.getInstance());
outState.putParcelable(Account.BUNDLE, Account.getInstance());
}
onSaveInstanceState
иBundle savedInstanceState
предназначены для случаев ротации или других, очень временных сценариев уничтожения/воссоздания. Уничтожение приложения в фоновом режиме было бы эквивалентно извлечению батареи из вашего приложения, поэтому ни один из методов жизненного цикла в этом сценарии не полезен. - person DeeV   schedule 12.10.2016