Size: a a a

Android Architecture

2017 February 01

P

Pavel in Android Architecture
Alexander Popsuenko
Презентер должен переживать переворот.
Subject лучше не использовать (особенно в таких простых ситуациях), посмотрите доклад Матвея Малькова об Rx.
Мой презентер его переживает, не переживает Subscription (происходит unsubscribe и после поворота subscribe). Сетевой запрос прерывается (InterruptedException) и приходится его выполнять заново (загрузка картинки например). Посмотрел доклад, как понял основной посыл не использования subject'ы т.к.  шанс что кто-то набросает лишних событий и код поддерживать тяжело. Я не против это сделать все мегаRеактивно но тут не избежать того, что дожна быть некая прослойка между запросом и ui (middle man), и вопрос где ее правильно хранить.
источник

AP

Alexander Popsuenko in Android Architecture
Понял.
Почему прерывается запрос?
источник

P

Pavel in Android Architecture
Eugene Matsyuk
1. Тут советуют заюзать мокси =)
2. cicerone посмотрите
Спасибо, попробуем.
А с Conductor не кто не имел дела?
источник

P

Pavel in Android Architecture
Alexander Popsuenko
Понял.
Почему прерывается запрос?
InterruptedException после unsubscribe (для сети Retrofit используется)
источник

AP

Alexander Popsuenko in Android Architecture
Зачем ты отписываешься от запроса при перевороте?
Отписывайся только при уничтожении презентера и вьюхи
источник

EM

Eugene Matsyuk in Android Architecture
Alexander Popsuenko
Зачем ты отписываешься от запроса при перевороте?
Отписывайся только при уничтожении презентера и вьюхи
поддерживаю
источник

P

Pavel in Android Architecture
Новая Activity, Context, View. Когда-то за основу бралось это https://github.com/ribot/android-boilerplate/blob/master/app/src/main/java/uk/co/ribot/androidboilerplate/ui/main/MainPresenter.java
источник

AP

Alexander Popsuenko in Android Architecture
Ну там у тебя не хватает уничтожения презентера.
Когда он уничтожается? Или живет, пока живо приложение?
источник

AP

Alexander Popsuenko in Android Architecture
В общем, как и посоветовали - использовать Moxy или дописать свой MVP по нормальному)
источник

AD

Andrew Dementiev in Android Architecture
Где лучше создать презентер что тобы ссылка на него переживала поворот? Учебный пример пишу без либ. Фабрику сделать которая в аппе живет? Или есть место где создать чтобы инстанс не утёк? Обычно у меня код без стейта в этом месте интересна именно возможность
источник

AD

Andrew Dementiev in Android Architecture
Обычно у меня презентеры про лайфсайкл не знают, есть bind, где дается контекст и идет запрос модели и unbind где все нравится к смерти, но по факту bind не вызывается дважды у одного инстанса если onCreate происходит
источник

P

Pavel in Android Architecture
Alexander Popsuenko
Ну там у тебя не хватает уничтожения презентера.
Когда он уничтожается? Или живет, пока живо приложение?
В часности вот этот комит с коментом "subscription leaks removed" https://github.com/ribot/android-boilerplate/commit/8e72f0c129bd7165ac89b49bad97b3d1cbda60f6 а mvp был взят за основу из этой же репы, boilerplate все таки.
Презентер сейчас @Singleton через дагер провайдится.
источник

ES

Eugene Shapovalov in Android Architecture
Alexander а что значит фраза : "Зачем ты отписываешься от запроса при перевороте?".
1) Как понять, что именно произошёл перевопот, а не учичтожение систетомой Activity в случае нехватки памяти?
2) Если не отписываться, то это приведёт к утечкам памяти.
источник

AP

Alexander Popsuenko in Android Architecture
Pavel
В часности вот этот комит с коментом "subscription leaks removed" https://github.com/ribot/android-boilerplate/commit/8e72f0c129bd7165ac89b49bad97b3d1cbda60f6 а mvp был взят за основу из этой же репы, boilerplate все таки.
Презентер сейчас @Singleton через дагер провайдится.
Ну синглтон презентер - не круто. Если в нем данные, то они будут жить и держать оперативку.
источник

AP

Alexander Popsuenko in Android Architecture
Eugene Shapovalov
Alexander а что значит фраза : "Зачем ты отписываешься от запроса при перевороте?".
1) Как понять, что именно произошёл перевопот, а не учичтожение систетомой Activity в случае нехватки памяти?
2) Если не отписываться, то это приведёт к утечкам памяти.
Презентер должен уничтожиться, когда уничтожится вьюха. Тогда и произойдет отписка.
А отписываться при перевороте - заново запускать запрос.
А если система грохнула приложение, тогда все уничтожится и утечек по сути быть не может)
источник

ES

Eugene Shapovalov in Android Architecture
> Alexander
А если система грохнула приложение

она может грохнуть не всю прилагу, а именно текущую Activity(Don't keep activities эмулирует эту ситуацию).
источник

P

Pavel in Android Architecture
Alexander Popsuenko
Ну синглтон презентер - не круто. Если в нем данные, то они будут жить и держать оперативку.
не, данные в репе, в презентере только ссылки на subject'ы и subscription'ы
источник

ES

Eugene Shapovalov in Android Architecture
Alexander Popsuenko
Презентер должен уничтожиться, когда уничтожится вьюха. Тогда и произойдет отписка.
А отписываться при перевороте - заново запускать запрос.
А если система грохнула приложение, тогда все уничтожится и утечек по сути быть не может)
а что делать в случае, когда пользователь загружает видео размером 100мб и уже загрузил 80 мб, и случайно перевернул телефон, то ему придётся всё заного грузить?
источник

P

Pavel in Android Architecture
Alexander Popsuenko
Презентер должен уничтожиться, когда уничтожится вьюха. Тогда и произойдет отписка.
А отписываться при перевороте - заново запускать запрос.
А если система грохнула приложение, тогда все уничтожится и утечек по сути быть не может)
> А отписываться при перевороте - заново запускать запрос.
Именно эта проблема и была решена subject'ами, что бы запросы выполнялись дальше...
источник

AP

Alexander Popsuenko in Android Architecture
Eugene Shapovalov
а что делать в случае, когда пользователь загружает видео размером 100мб и уже загрузил 80 мб, и случайно перевернул телефон, то ему придётся всё заного грузить?
Насчет убийства активити - не думал о таком кейсе. Если Moxy с этим борется, то отлично)
При перевороте прзентер живет, он уничтожается только когда вьюха уничтожается, а не пересоздается.
источник