Комментарии 24
Зачем все это? Можно просто указать в манифесте флаг на отмену пересоздания активити при повороте экрана
-5
Можно просто указать в манифесте флаг на отмену пересоздания активити при повороте экрана
Не всегда «просто». Иногда требуется при повороте экрана изменить верстку в соответствии с ориентацией.
+2
Есть тысяча и одна причина, почему активити может быть пересоздана. Этот «костыль» лишь отложит проблему, а не исправит её.
+2
Для этого надо постоянно запоминать на каком экране пользователь и какие поля заполнены/что отображается на экране. И потом восстанавливать
0
Это все за вас уже делает сам андроид, нужно только правильно использовать. Если у вас есть свои собственные элементы, то при правильной имплементации(onSaveInstanceState/onRestoreInstanceState), они так же будут сохранять свое состояние автоматически.
0
А если видос вылетел, что, на тот же момент вернет? Сомневаюсь. Или фотку после вылета с нужным зумом покажет? Но круто, если так.
0
Ну вам же написали про onSaveInstanceState/onRestoreInstanceState. Стандартные компоненты по возможности восстанавливают свое состояние. Для всего остального уже есть готовые инструменты, на которые большинство разработчиков забивают, потому что на возросших мощностях девайсов нужно еще постараться, чтобы воспроизвести пересоздание активити системой.
Но на одних позитивных сценариях далеко не уедешь, максимум это все эти запреты переворотов сойдут только для низкобюджетных или pet-проектов.
Но на одних позитивных сценариях далеко не уедешь, максимум это все эти запреты переворотов сойдут только для низкобюджетных или pet-проектов.
0
Смеюсь. Покажите мне вменяемое андроид-приложение в лс. Я от силы штук 5 вылизанных могу показать, остальных просто нет. Копни чуть глубже обычных кейсов и там ужас. Алерты в стиле 2.3, локализация, внимание к мелочам, правильная логика работы с памятью, интеграция в систему — со всем этим есть проблемыы у проектов из ТОП-10
+1
Для фрагментов в бэкстеке ваш способ не пройдет, у них дестроится вью при реплейсе. И придется восстанавливать стейт.
0
Дико сложно. У меня может быть много разных диалогов в одной активити (не одновременно, конечно, по очереди). Они через JNI cвязаны с С++ ядром. Для себя решил, что единственный способ нормально писать приложение без кучи левого кода и головной боли — отключить пересоздания активити при повороте. Да, согласен, что кому-то может быть нужен разный layout для портертной и пльбомной ориентации, тогда это не сработает, но у меня всё корректно лэйаутится автоматом из одного и того же XML.
0
Выше же писали что переворот это частный случай пересоздания активити и все случаи не отключить. Попробуйти включить «донт кип активити» и посмотрите что будет =)
+1
Я понимаю, но мне это не кажется существенно важным. И даже утекающие диалоги вряд ли критичны, я считаю, что по сравнению с кучей спагетти-кода это меньшее зло. А вот то, что пользователь хотел что-то рассмотреть получше, повернул телефон, а UI исчез с экрана — вот так делать некрасиво.
0
Хм. Не понятно почему UI должен вдруг изчезнуть с экрана. При перевороте система «отрисует» либо тотже лейаут что и для портрета, либо лейаут специально предназначеный для ландскейпа.
И в большистве случаев при пересоздании активити (если дев не поддерживает это) происходит краш =) Но это по моему личному опыту =)
И в большистве случаев при пересоздании активити (если дев не поддерживает это) происходит краш =) Но это по моему личному опыту =)
0
А еще, можно запрещать поворот экрана при показе диалога, а при закрытии разрешать его :)
+1
Уже миллион раз сказано — пересоздание активити происходит не только при перевороте, а еще при смене локали, сим-карты, подключении внешней клавы, смене размера шрифта, смене размера экрана (multiwindow), смена ui-режима (dex-станция).
Будете все запрещать?
Да даже при входящем звонке система может прибить активити, а после окончания звонка пользователь вернется в приложение без восстановленного стейта.
Будете все запрещать?
Да даже при входящем звонке система может прибить активити, а после окончания звонка пользователь вернется в приложение без восстановленного стейта.
+1
Ну по идеи на почти все можно же запретить)
0
Тогда лучший вариант тестирования приложения на предмет пересоздания активити — это «don't keep activity» в параметрах разработчика?
0
Papashkin не совсем, это исскуственная смерть Activity, которая может помочь найти пару багов, но в реальности не может быть. Подробнее тут habr.com/ru/company/redmadrobot/blog/426617
0
Вот извечная печаль андроид-разработки — когда визуально простое поведение требует ну совсем нетривиальных решений… И расскажи это потом заказчику, отчего у тебя куча времени ушла на какую-то ерунду…
+1
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Свежий взгляд на отображение диалогов в Android