Как передать дерево объектов в связку? - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть приложение, которое состоит в основном из одного экземпляра, который представляет собой дерево объектов. Каждый раз, когда мой телефон спит или я переключаю приложение, оно сбрасывается, и все данные в этом дереве объектов теряются.

Сначала я попытался использовать onSaveInstanceState (), но пакет saveinstancestate не позволил мне передать экземпляр нужного мне объекта. Я пытался передать объект как посылку, но объекты внутри моего объекта не могли быть сохранены в посылку.

Наконец, я попытался использовать getNonConfigurationInstance, который, похоже, не работает, и я отказался заставить его работать, когда посмотрел, что оно устарело. Альтернативой этому является API11, я использую API7.

Любой совет приветствуется, я прочитал документацию, но не могу найти ничего, кроме как просмотреть все мои объекты и сохранить каждую переменную одну за другой, чтобы сохранить состояние моего экземпляра.

Спасибо

1 Ответ

3 голосов
/ 25 февраля 2012
  1. Вы должны использовать getNonConfigurationInstance только в сочетании с onRetainNonConfigurationInstance, поскольку первый сохраняет объект, а второй сохраняет его. Кроме того, они работают только для изменений конфигурации, т. Е. Когда действие немедленно воссоздается в том же процессе.

  2. Если объекты в вашем дереве просты, вы можете попробовать перевести его в формат JSON, а затем сериализовать / десериализовать. Однажды я сделал это, чтобы сохранить состояние иерархии контроллеров, отлично сработало.

  3. Вы можете поместить Bundle s внутри Bundle s с помощью putBundle(String key, Bundle value).

  4. Вы можете поместить Parcelable s внутри Bundle s с помощью putParcelable(String key, Parcelable value).

Опции 2, 3 и 4 потребуют от вас записать рекурсивный преобразователь вашего дерева в / из JSONObject s, Bundle s или Parcelable s.

...