LINUX.ORG.RU

Android: Activity почему не юзать MVC?

 


0

2

ну вот я вляпался в это чудо, смотрю на http://developer.android.com/guide/topics/resources/runtime-changes.html#Reta...

и думаю, а отчего, черт побери, эти затейники не допускают использование такой абсракции как «модель», ну кажется вам activity куском сала, ну и фиг с ним, но сериализовать произвольную структуру данных которую представляет activity в байтики только ради того чтобы повернуть экран, это же бред!

Кто мне объяснит отчего они так извратились?

ps. про android:configChanges и фрагменты напоминать не надо

Deleted

А кто их знает, наверное в ООО «Android» упоролись и сделали так как есть, а когда разупоролись менять что-то было поздно — сроки жали и обратная совместимость тянула.

crowbar
()

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

Используй фрагменты, они решают многие проблемы данного подхода.

mono ★★★★★
()

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

buddhist ★★★★★
()
Ответ на: комментарий от mono

A Fragment represents a behavior or a portion of user interface in an Activity.

т.е. для состояния это костыль

Deleted
()

Если ты свернешь приложение в фон, а ОС его потом убъет, то твоя модель обнулится, и вернувшись в активность тебе нечего будет отобразить.

kazufukurou
()
Ответ на: комментарий от kazufukurou

В таком случае данных можно сохранять меньше, потому что убийство приложения вполне допускает частичную потерю состояния. Но при повороте экрана данные должны сохраниться на 100%, потому что юзер не прерывал работу с приложением.

KivApple ★★★★★
()
Ответ на: комментарий от kazufukurou

если ОС убьет приложение, то ни о каком состоянии и речи быть не может, тем более что приложение работает с сетью

Deleted
()

Так Activity и есть View, внезапно.

А «модель» это то, что ты ей скинул через Intent во время вызова startActivity()

no-dashi ★★★★★
()
Ответ на: комментарий от KivApple

Активность - это такой объект, который когда скрыт от глаз пользователя, из-за особенностей ОС, может быть удален в произвольный момент. Поэтому не стоит хранить в нем данные - либо хранить и сериализовать в onSaveInstanceState, либо хранить данные в объекте Application или другом синглтоне.

kazufukurou
()
Ответ на: комментарий от kazufukurou

который когда скрыт от глаз пользователя, из-за особенностей ОС, может быть удален в произвольный момент.

Политрук Очевиднев, речь о повороте экрана при которой Activity также _удаляется_, нетрудно заметить что сериализовать EpicStructure только на время поворота экрана есть ппц. Также как и заводить синглтон ради состояния которое (в моем случае) вне активити не то что не требуется, а вообще вредно

Deleted
()
Ответ на: комментарий от Deleted

Если не меняешь лайаут при повороте, сетаешь обработку поворота вручную и ничего не делаешь.

F457 ★★★★
()
Ответ на: комментарий от Deleted

Ты же сам сказал не говорить о android:configChanges, оно как раз специально для твоего случая. Понятное дело, что при повороте не стоит сериализовать EpicStructure - ну сделай его статичным полем в активности если лень еще один класс создать.

kazufukurou
()
Ответ на: комментарий от kazufukurou

оно как раз специально для твоего случая

не, оно во первах костыль по сути, во вторых у меня layout другой, совершенно.

так да, состояние закинул в в класс и его уже в статическое поле, подозреваю что клас активит может выгружаться, когда его не видно (не нашел упоминания такого нюанса), но после этого мне состояние не требуется так что не страшно

один фиг все выглядит костыльно

Deleted
()
Ответ на: комментарий от Deleted

Я думаю их можно понять, сравни 2 случая: 1) поворот экрана 2) свернуть активность, повернуть экран, открыть активность

Результат одинаков, но во 2м случае они же не знают откроешь ли ты через секунду или неделю, поэтому стэйт сохраняют. А раз результат одинаков, то почему бы для 1 не реюзать уже готовый код для 2!

kazufukurou
()
Ответ на: комментарий от kazufukurou

потому что после сворачивания мне состояние уже не требуется

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.