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

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

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

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

13.02.2012, 18:33. Просмотров 3790. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SurfaceView при изменении ориентации экрана перегружается (Программирование Android):

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

Не отображать SplashScreen при смене ориентации экрана - Программирование Android
Не могу понять как сделать чтобы сплэш не появлялся снова при смене ориентации экрана? + подскажите, почему при горизонтальной...

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

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

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

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

5
Bes-s
30 / 30 / 2
Регистрация: 05.11.2011
Сообщений: 178
13.02.2012, 20:56 #2
при смене ориентации последовательно происходят onPause() onResume(). поэтому советую на onPause() сохранять состояние тетриса, а на onResume() его возобновлять. либо запретить смену ориентации экрана.
1
NiRamz
211 / 211 / 16
Регистрация: 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 / 3
Регистрация: 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 / 16
Регистрация: 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 / 3
Регистрация: 25.09.2011
Сообщений: 84
14.02.2012, 11:47  [ТС] #6
Цитата Сообщение от NiRamz Посмотреть сообщение
при такой блокировке придется в ручную обрабатывать изменение конфигурации устройства.
почему придется обрабатываеть?
при наличии атрибута в активити в манифесте android:configChanges="keyboardHidden|orientation"
телефон вообще не реагирует на изменение ориентации экрана.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 11:47
Привет! Вот еще темы с ответами:

Смена ориентации экрана - Программирование Android
в папке layout файл screen.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

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

Событие смены ориентации экрана - Программирование Android
доброго времени суток у меня такой вопрос как написать оброботчик события смены оринтация экрана например как это записать ...

Запретить смену ориентации экрана - Программирование Android
имеется проблема в большом весе приложения и нежелании делать отдельные фоны для активити для горизонтальной ориентации. Как сделать чтобы...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
14.02.2012, 11:47
Ответ Создать тему
Опции темы

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