Сохранение некоторых данных об изменении ориентации в Android - PullRequest
5 голосов
/ 24 августа 2011

Насколько я понял, ваша активность Android будет воссоздана для новой ориентации при любых изменениях ориентации.

Есть ли способ сохранить / сохранить некоторые данные из исходной ориентации приизменение ориентации?

Я хотел бы сохранить несколько растровых изображений, поэтому мне не нужно загружать его снова при изменении ориентации.

Ответы [ 5 ]

12 голосов
/ 24 августа 2011

Использование статических переменных / классов - плохой подход с точки зрения удобства сопровождения и отладки.


Я использовал Activity.onRetainNonConfigurationInstance, но я только сейчас обнаружил, что это устарело (вероятно, из-за сотовой илипотом). Activity.onRetainNonConfigurationInstance

Используя этот метод, просто вызовите Activity.getLastNonConfigurationInstance, чтобы получить тот же объект, который вы вернули в onRetainNonConfigurationInstance.Не забудьте проверить на нулевое значение и привести к нужному классу (вы можете вернуть / получить любой класс). Activity.getLastNonConfigurationInstance

Пример использования в псевдокоде будет:

onRetainNonConfigurationInstance:
    return "I need to remember this next time";

onCreate:
    ...
    String messageToShow = null;
    Object data = getLastNonConfigurationInstance();
    if(data != null)
        messageToShow = (String)data;
    else
        messageToShow = "Nothing to show";

Итак, если вы нацеливаетесь на 2.xx, вы можетеиспользуйте этот метод.В противном случае Google рекомендует использовать Fragment.setRetainInstance.Это обратно совместимо через пакет совместимости.

Fragment.setRetainInstance

5 голосов
/ 24 августа 2011

Сохраните элементы в родительском действии или в статическом служебном классе.

В противном случае вы можете использовать манифест, чтобы сообщить приложению, чтобы оно не уничтожало действие при изменении размеров экрана.Проверьте эту статью: http://developer.android.com/guide/topics/resources/runtime-changes.html

1 голос
/ 24 августа 2011

На самом деле на сайте разработчиков Android есть очень хорошая статья, посвященная этой теме.

Некоторые устройства, такие как T-Mobile G1, могут изменять конфигурацию своего оборудования во время выполнения.Например, когда вы открываете клавиатуру, экран меняется с книжной ориентации на альбомную.

Чтобы упростить разработку приложений Android, система Android автоматически обрабатывает события изменения конфигурации и перезапускает текущее действие с новымконфигурация.

[...]

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

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

[...]

Полный текст статьи .

0 голосов
/ 23 мая 2013

вы можете попробовать использовать sharedpreferences:

editor edit = preferences.edit(); edit.putString("username", "new_value_for_user"); edit.commit();

0 голосов
/ 24 августа 2011

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

...