2016-10-12 4 views
0

Я пытаюсь восстановить свое приложение после его смерти в фоновом режиме. Он всегда сбой при попытке доступа к переменной «config», потому что он является нулевым, даже после того, как он был сохранен на onSaveInstanceState (он всегда есть, я протестировал его в режиме отладки, и завышенный объект имеет объект внутри своей карты).Bundle savedInstanceState parcelable object null = null при убийстве приложения в фоновом режиме

Что меня смущает, так это то, что он отлично работает на корпусе вращения. Поэтому я думаю, что нет ничего плохого в построении объекта из посылки. Это просто не работает, когда я убираю приложение в фоновом режиме.

Когда я записываю saveInstanceState в onCreate после того, как я убью приложение в фоновом режиме, Config.BUNDLE возвращает null = null (no key, no value), но Account.BUNDLE, который является похожим объектом, не поврежден.

Кроме того, я попытался добавить еще один объект String в savedInstanceState, и он также будет сохранен правильно.

@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()); 
} 
+0

'onSaveInstanceState' и' Bundle savedInstanceState' предназначены для случаев вращения или другой, очень временный, уничтожить/воссоздают сценарии. Убивание приложения в фоновом режиме было бы эквивалентно вытягиванию батареи, насколько это касается вашего приложения, поэтому ни один из методов жизненного цикла не является полезным в этом сценарии. – DeeV

+0

Я думаю, что вам нужно привести ваши параметры пакета в Config –

ответ

0

Я только узнал, что проблема заключается в цепочке ключей Bundle.

Config.BUNDLE - это строка со значением «BUNDLE_CONFIG», а Account.BUNDLE - «BUNDLE_ACCOUNT».

Если я изменил строку Config.BUNDLE на любое другое значение без включения «CONFIG» в любую часть строки, он работает, иначе это не так. Я даже очистил проект, но результат тот же. Я не понимаю, почему.

Пример:

public final static String BUNDLE = "BUNDLE_CONFIG"; //NOT OK 
public final static String BUNDLE = "BUNDLE_SETTINGS_CONFIG"; //NOT OK 
public final static String BUNDLE = "BUNDLE_TEST"; //OK 
public final static String BUNDLE = "BUNDLE_ANY_OTHER_WORD"; //OK 
+0

Значение строки ключа не должно иметь значения (в пределах разумного). Может быть, у вас есть некоторые устаревшие информационные ключи в SharedPreferences? Вы пытались удалить и переустановить APK, чтобы получить новый набор SharedPreferences? Просто мысль... – Mike

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