2016-01-28 3 views
1

Я понимаю, что когда устройство вращается, Android уничтожает и воссоздает текущую активность, чтобы загрузить ресурсы, ориентированные на ориентацию. Чтобы сохранить состояние, я могу использовать onSaveInstanceState(Bundle outState) и обычный onCreate(Bundle savedInstanceState), но это сохраняет и восстанавливает состояние каждый раз, когда приложение уничтожается/создается по любой причине.Каков правильный способ сохранения состояния экземпляра только при вращении?

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

+0

Вы сохраняете только переменные-члены, данные или динамический контент. Все, что связано с идентификатором Android, автоматически заботится о вас. Есть обратные вызовы ('onLowMemory'), которые позволяют вам получать информацию о низкой памяти в классе Activity. – TheSunny

ответ

0

Оказывается, мой вопрос был неправильным с самого начала.

Когда устройство вращается, Android вызывает onSaveInstanceState(Bundle outState) и onRestoreInstanceState(Bundle savedInstanceState) как способ для сохранения или восстановления состояния разработчика. Когда действие уничтожается с помощью кнопки «Назад» или finish(), onSaveInstanceState - не и savedInstanceState комплект, который передан в onCreate(). Поэтому, пытаясь ответить на вопрос «было ли это создано после ротации или нет?» вопрос не имеет значения.

Опубликовано в том случае, если у кого-то есть тот же вопрос и благодаря всем, что потребовалось время для чтения и помощи.

0

Вы можете установить метод onConfigurationChange(). Для этого вам необходимо изменить его в коде Activity и задать несколько параметров в манифесте:

MainActivity.java

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

Вы должны добавить эти атрибуты (android:configChanges="orientation|screenSize") к вашей деятельности, установить столько, сколько вы хотите обрабатывать:

AndroidManifest.xml

<activity android:name=".MyActivity" 
      android:configChanges="orientation|screenSize" 
      android:label="@string/app_name"> 

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

Теперь, когда одна из этих конфигураций изменяется, MyActivity не перезапускает . Вместо этого MyActivity получает вызов onConfigurationChanged().

Ссылка на main documentation.