BitNeBolt, у нас Стейт живёт примерно столько же, сколько контроллер. Когда нужно сохранить временно в бандл, он тоже сохраняется, поэтому он Parcelable. Вместе с аппликейшн он, конечно, не живёт.
По сути, каждый экран(контроллер) имеет свой Стейт. Есть большие фичи, в которых много экранов, тогда Стейты этих экранов объединены в общем Стейте фичи(открой в Яндекс.Картах поиск, или маршрут, это примеры таких больших фичей). Экраны реализованы в дочерних контроллерах, а каждая фича имеет один контроллер-точку-входа.
Маппер, таким образом, обычно один на экран. Он очень легковесный, у него минимум зависимостей. Это не аксиома, может быть несколько мапперов на один экран, если Стейт очень сложный.
Что такое StateProvider это уже другой вопрос, в принципе, такую штуку можно вписать и в обычный MVP,и тогда этот провайдер может просто содержать в себе Publish/BehaviorSubject, в который презентер будет эмиттить измененный Стейт при любых действиях. Некоторое время мы так жили. Если презентер не слишком сложный, то ок получается.
Сейчас у нас почти всё написано на Redux(самописная реализация), и в его терминах Store<State> == StateProvider<State> + Dispatcher
Вообще Redux классная идея, рекомендую изучить. Кажется, для андроида есть какие-то реализации, но в принципе, ты можешь его и сам написать, там ничего сложного. У нас каждая большая фича имеет свой собственный инстанс редакса, привязанный к жизненному циклу контроллера. Редакс параметризуется стейтом. Классически всё приложение должно быть описано одним стейтом, но мы пришли к тому, что для нашего случая это не работает, потому что а) получаются циклические Стейты, б) все фичи знают друг о друге.
Всё, что я говорю про контроллеры, 1-в-1 переносится на фрагменты, это непринципиально.
Это не стоит того, чтобы заранее их изучать. Я на собеседованиях спрашиваю, знаком или нет, если да - в чём различия с новыми версиями. Если не знаком, это в минус не идёт.
Может есть более эффективный способ изучения Java, чем книги?
Прочитал первую книгу по джаве после трёх лет знакомства с ней(один год использования в проде, и два - в универе). Самый эффектиный способ изучения любого языка программирования - это писать код. Книжку почитаешь, когда станет понятно, где пробелы, что непонятно, что интересно понять.
foonfyrick, флаттер это хайп. Взлетит он или нет, пока неизвестно, Гугл легко может его закопать. Замарин старая технология, у неё есть свои последователи. Сейчас никто не рассчитывает из работодателей, что ты придёшь с опытом кроссплатформенной разработки.