Сохранение представления данных / макета в Android после поворота экрана / уничтожения активности

Я немного смущен Activity уничтожается и воссоздается при повороте устройства пользователя.

Я читал вокруг, и я понимаю обоснование для этого (это в основном "заставляет" разработчика, чтобы убедиться, что они ничего не "пропустили" при ротации / язык / другие изменения)

Я рад уважать лучшую практику, если она рассматривается как таковая, однако возникает вопрос:

Как мне "запомнить" состояние игры / приложения, чтобы при повороте экрана у меня было что-то, из чего можно заново сгенерировать то, на что смотрел пользователь?

Из того, что я вижу, абсолютно все разрушено, запускается конструктор базового класса и все переменные в Activity являются "нулевыми".

Я подозреваю, что 'saveInstanceState' (Bundle class), где я собираю эти данные, но чтение вокруг них, кажется, используется только тогда, когда приложение закрыто из-за нехватки ресурсов (и нескольких других крайне ограниченных случаев)

Я дезинформирован или неправильно понял цель saveInstanceState? Разумно ли отказаться от лучших практик (позволяя Activity быть уничтоженным) если я достаточно внимателен, чтобы ничего не пропустить при вращении? Спасибо заранее за любые советы.

Должен отметить, что этот вопрос относится к программированию игр (я не использую макет XML)

2 ответа

Решение

Вам нужно воссоздать свою деятельность? Есть ли работа, которую вы хотите сделать на ротации? saveInstanceState - это место, где вы будете хранить данные для передачи в воссоздание Activity, но, поскольку вы не используете макеты XML, вы можете просто добавить android:configChanges="direction" к своей активности в манифесте. Это даст вам ручное управление тем, что происходит во время смены поворота.

В дополнение к моему первоначальному комментарию я бы отменил изменения конфигурации для отображаемой клавиатуры:

android:configChanges="orientation|keyboardHidden"

Если есть работа, которую вы хотите сделать с изменением поворота, вы можете переопределить onConfigChange и делать все, что вам нужно там.

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

Существуют и другие рекомендации по хранению данных при изменении конфигурации activitiy.

1. Документ разработчика, обрабатывающий изменения времени выполнения
2. Алекс Локвуд: Обработка изменений конфигурации с фрагментами. Это ответит на все ваши вопросы, касающиеся изменения конфигурации и хранения данных.

Impt: файл фрагмента для хранения данных. Вы должны установить setRetainInstace(true) для того, чтобы хранить данные и извлекать их во время изменения конфигурации вашей деятельности.

@Override 
   public void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);        
          // retain this fragment
          setRetainInstance(true);    
    }
Другие вопросы по тегам