2010-11-02 3 views
7

Когда я меняю ориентационное приложение, перезагружается, и я потерял свои текущие данные. Я использую группу действий, которая содержит множество действий при изменении ориентации приложения, которое запускается из основного действия.Приложение для Android перезагружается при изменении ориентации

можно ли избежать перезапуска приложения при изменении ориентации?

Кто-нибудь знает, пожалуйста, дайте мне знать ..

ответ

9

Android перезапускает деятельности всякий раз, когда изменение ориентации по умолчанию.

Вам нужно будет сохранить свои данные/состояние, позвонив onSaveInstanceState(), прежде чем Android уничтожит действия.

Посмотрите здесь: Handling Runtime Changes

Это SO question также доказывает, что хорошо читать в понимании того, как вы могли бы иметь дело с ним.

Вы можете предотвратить это, добавив android:configChanges="orientation" к вашей деятельности в файле AndroidManifest.

Источник: http://developer.android.com/guide/topics/manifest/activity-element.html#config

+1

Я был используя группы активности, а также для каждого действия или группы, мое приложение взаимодействует с сервером и извлекает данные. Таким образом, было невозможно обработать изменение конфигурации каждого действия. Вместо этого я сохраняю ориентацию фиксированной и использую прослушиватель для изменения ориентации, а затем использую отдельный XML для пейзажа и портрета. Это предотвратит перезапуск приложения и сохранит мои данные. – sachin

1

Вот как это должно работать. Есть способ сделать это не так, но вы должны следить за жизненным циклом и умело обрабатывать перезагрузки активности. Это задавали здесь много раз.

1

Можно сказать системе игнорировать изменения со следующим:
<activity android:name="SomeActivity" android:configChanges="keyboardHidden|orientation">

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

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

+0

Я знаю, что ответ старый ('10), но это должно быть первое и принятое – HAlexTM

1

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

Если не указано иное, то изменение конфигурации (например, изменение ориентации экрана [...]) приведет вашу текущую деятельность, чтобы быть уничтожены, пройдя через нормальный процесс жизненного цикла активности OnPause(), OnStop() и onDestroy(). Если действие было на переднем плане или видимо для пользователя, как только onDestroy() вызывается в этом экземпляре , тогда будет создан новый экземпляр активности с любым сохраненнымInstanceState, сгенерированным предыдущим экземпляром из onSaveInstanceState (Bundle).

http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges

10

если ваш андроид: targetSdkVersion = "12" или менее

андроида: configChanges = "ориентация | keyboardHidden">

если ваш андроид: targetSdkVersion = "13" или подробнее

android: configChanges = "orientation | keyboardHidden | screenSize">