Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
dollar8
13 / 13 / 0
Регистрация: 25.09.2011
Сообщений: 84
#1

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

13.02.2012, 18:33. Просмотров 3930. Ответов 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);
    }
но что нужно написать в этом методе, чтобы не пересоздавалось Активити?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 18:33
Ответы с готовыми решениями:

Выбрасывает из приложения при смене ориентации экрана
Здравствуйте. Следующая проблема. Создал папку layout-land в папке res. И при...

Задний фон при смене ориентации экрана
Здравствуйте! Мне надо чтобы фон не сжимался так, а как в HTML оптимизировал...

Потеря вывода при смене ориентации экрана
Калькулятор вывел результат в компонент textview. Стоит поменять ориентацию...

При смене ориентации экрана накладываются фрагменты
Юзаю Android.Support.V4.App.Fragment, вроде бы все нормально. При переключении...

Не отображать SplashScreen при смене ориентации экрана
Не могу понять как сделать чтобы сплэш не появлялся снова при смене ориентации...

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

лучше пользоваться по возможности savedInstanceState.
или же если вам не нужно что бы менялась ориентация экрана можно в onCreate() написать следующее .
Java
1
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
1
dollar8
13 / 13 / 0
Регистрация: 25.09.2011
Сообщений: 84
14.02.2012, 00:47  [ТС] #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 вызывается при повороте экрана.
0
NiRamz
211 / 211 / 33
Регистрация: 26.12.2010
Сообщений: 691
14.02.2012, 01:04 #5
Цитата Сообщение от dollar8 Посмотреть сообщение
а точно onPause onResume ? разве не onFinish onCreate ?
вызывается полный цикл. то есть onPause, onStop, onDestroy после чего onStart, onCreate. это легко проверить, переопределив эти методы и выводя значения в logCat.


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


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

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

Блокировка навигации при смене ориентации экрана
Доброго времени суток.Прошу помощи у знающих: Приложение использует Navigation...

При любой ориентации экрана табы были всегда под ActionBar
Уважаемые программисты! Подскажите, пожалуйста как можно сделать так, чтобы...

Изменение ориентации экрана
здравствуйте. возник вопрос,допустим я программно запретил изменения экрана...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru