Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 5.00
dollar8
 Аватар для dollar8
13 / 13 / 3
Регистрация: 25.09.2011
Сообщений: 84
#1

SurfaceView при изменении ориентации экрана перегружается - Android

13.02.2012, 18:33. Просмотров 3657. Ответов 5
Метки нет (Все метки)

при создании тетриса возник вопрос.
один из моих классов расширяет класс SurfaceView

Java
1
public class TetrisView extends SurfaceView
так вот. при изменении ориентации экрана этот класс (TetrisView) полностью перезагружается.
Для меня это критично. т.к. я теряю поток и заново вызывается конструктор TetrisView - т.е. игра начинается заново.

(в манифесте у меня стоит android:screenOrientation="portrait" )

сделать данные static можно, но если ли какой либо способ вообще выключить некий слушатель поворота экрана?

и почему это вообще происходит?

Заранее спасибо за ответ.

Добавлено через 17 минут
Хочу дополнить. что
изменение экрана слышит стартовое Активити. вот оно убивается и запускается сначала (собсветнно что на developer.android.com и написано)
так же там написано чтобы залочить экран нужно повозиться с Манифестом (добавить android:configChanges="orientation")
и метод добавить в стартовое активити
Java
1
2
3
4
@Override
    public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    }
но что нужно написать в этом методе, чтобы не пересоздавалось Активити?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 18:33     SurfaceView при изменении ориентации экрана перегружается
Посмотрите здесь:

Смена ориентации экрана Android
Изменение ориентации экрана Android
Android Потеря вывода при смене ориентации экрана
Выбрасывает из приложения при смене ориентации экрана Android
Событие смены ориентации экрана Android
Android Поведение после смены ориентации экрана
Android Запретить смену ориентации экрана
Android Смена ориентации экрана перезапускает приложение
Android Задний фон при смене ориентации экрана
Android При смене ориентации экрана накладываются фрагменты
При любой ориентации экрана табы были всегда под ActionBar Android
Не отображать SplashScreen при смене ориентации экрана Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bes-s
 Аватар для Bes-s
30 / 30 / 2
Регистрация: 05.11.2011
Сообщений: 178
13.02.2012, 20:56     SurfaceView при изменении ориентации экрана перегружается #2
при смене ориентации последовательно происходят onPause() onResume(). поэтому советую на onPause() сохранять состояние тетриса, а на onResume() его возобновлять. либо запретить смену ориентации экрана.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
13.02.2012, 21:07     SurfaceView при изменении ориентации экрана перегружается #3
в манифест, в самом коде ничего не надо писать.
XML
1
android:configChanges="keyboardHidden|orientation"
при этом ориентация экрана меняться будет, но не будет пересоздаваться по новой активити, но это "не очень" хороший метод))

лучше пользоваться по возможности savedInstanceState.
или же если вам не нужно что бы менялась ориентация экрана можно в onCreate() написать следующее .
Java
1
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
dollar8
 Аватар для dollar8
13 / 13 / 3
Регистрация: 25.09.2011
Сообщений: 84
14.02.2012, 00:47  [ТС]     SurfaceView при изменении ориентации экрана перегружается #4
Цитата Сообщение от NiRamz Посмотреть сообщение
в манифест, в самом коде ничего не надо писать.
XML
1
android:configChanges="keyboardHidden|orientation"
при этом ориентация экрана меняться будет, но не будет пересоздаваться по новой активити, но это "не очень" хороший метод))

лучше пользоваться по возможности savedInstanceState.
или же если вам не нужно что бы менялась ориентация экрана можно в onCreate() написать следующее .
Java
1
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
как я понял
или в манифесте прописать.
Java
1
           android:screenOrientation="portrait"
или в onCreate()
Java
1
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
разницы вроде никакой (впрочем так и написано на девелоперс.андроид.ком)
и при повороте эмулятора (с девайсом без физ.клавы все ОК) Активити-таки финиширует и стартует заново, т.е. не то что нужно.

а вот при
XML
1
android:configChanges="keyboardHidden|orientation"
все работает на Ура

а что значит "не очень" хороший метод? почему в классе лучше писать св-ва экрана нежели , чем в манифесте?

Добавлено через 3 минуты
Цитата Сообщение от Bes-s Посмотреть сообщение
при смене ориентации последовательно происходят onPause() onResume(). поэтому советую на onPause() сохранять состояние тетриса, а на onResume() его возобновлять. либо запретить смену ориентации экрана.
ну вот и думаем как запретить смену ориентации. но походу в уже решили.
а точно onPause onResume ? разве не onFinish onCreate ? ибо у меня вроде бы Create вызывается при повороте экрана.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
14.02.2012, 01:04     SurfaceView при изменении ориентации экрана перегружается #5
Цитата Сообщение от dollar8 Посмотреть сообщение
а точно onPause onResume ? разве не onFinish onCreate ?
вызывается полный цикл. то есть onPause, onStop, onDestroy после чего onStart, onCreate. это легко проверить, переопределив эти методы и выводя значения в logCat.


Цитата Сообщение от dollar8 Посмотреть сообщение
разницы вроде никакой
да, разницы не какой. Просто сам пишу в коде.


Цитата Сообщение от dollar8 Посмотреть сообщение
а что значит "не очень" хороший метод?
при такой блокировке придется в ручную обрабатывать изменение конфигурации устройства.
лучше всего использовать savedInstanceState.

еще как варинат можно использовать для сохранения
Java
1
onRetainNonConfigurationInstance
а в onCreate для восстановления
Java
1
getLastNonConfigurationInstance
dollar8
 Аватар для dollar8
13 / 13 / 3
Регистрация: 25.09.2011
Сообщений: 84
14.02.2012, 11:47  [ТС]     SurfaceView при изменении ориентации экрана перегружается #6
Цитата Сообщение от NiRamz Посмотреть сообщение
при такой блокировке придется в ручную обрабатывать изменение конфигурации устройства.
почему придется обрабатываеть?
при наличии атрибута в активити в манифесте android:configChanges="keyboardHidden|orientation"
телефон вообще не реагирует на изменение ориентации экрана.
Yandex
Объявления
14.02.2012, 11:47     SurfaceView при изменении ориентации экрана перегружается
Ответ Создать тему
Опции темы

Текущее время: 07:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru