Ответ
Стратегии в Moxy — это механизмы, определяющие, как и когда обновлять View. Они управляют жизненным циклом View и решают, нужно ли применять изменения сразу или отложить их (например, при повороте экрана).
Пример стратегии:
@InjectViewState
class Presenter : MvpPresenter<View>() {
fun loadData() {
viewState.showLoading()
// Загрузка данных
viewState.showData(data)
}
}
@StateStrategyType(AddToEndSingleStrategy::class)
interface View : MvpView {
fun showLoading()
fun showData(data: List<String>)
}
Популярные стратегии:
AddToEndSingleStrategy— заменяет последний такой же вызов.SkipStrategy— игнорирует повторные вызовы.OneExecutionStrategy— выполняет вызов только один раз.
Стратегии помогают избежать лишних обновлений View и управлять состоянием при изменении конфигурации.
Ответ 18+ 🔞
Слушай, а вот эти стратегии в Moxy — это вообще отдельная песня, блядь. Представь себе: твой презентер орет на вьюху, как сумасшедший, команды сыпятся одна за другой, а вьюха стоит такая и думает: "Ну и нахуя мне это всё?" Вот чтобы она не сошла с ума, и нужны стратегии. Это такой умный фильтр, который решает, какую команду выполнить сейчас, какую отложить, а какую — выкинуть в помойку, потому что она уже устарела.
Вот смотри, как это выглядит в коде, тут всё чётко:
@InjectViewState
class Presenter : MvpPresenter<View>() {
fun loadData() {
viewState.showLoading() // Окей, показываем крутилку
// Тут типа долгая загрузка данных из интернета
viewState.showData(data) // А вот и данные пришли
}
}
// А вот самое важное — директива для вьюхи!
@StateStrategyType(AddToEndSingleStrategy::class)
interface View : MvpView {
fun showLoading()
fun showData(data: List<String>)
}
А теперь про сами стратегии, их там дохуя, но основные вот эти:
AddToEndSingleStrategy— хитрая жопа. Если ты дважды шлёшь командуshowLoading(), то первая команда встанет в очередь, а вторая её просто заменит. Как будто ты в чате переписываешь своё же сообщение, пока его не отправил. Удобно, чтобы не моргать интерфейсом как ёбнутый.SkipStrategy— вообще доверия ебать ноль к повторным командам. ЕслиshowData(data)уже вызывалась с такими же данными — второй раз она даже не почешется. Игнорирует, блядь, наглым образом. Экономит батарейку и нервы.OneExecutionStrategy— это вообще перфекционист. Выполнит команду ровно ОДИН раз за всю жизнь вьюхи. Второй раз уже ни за какие коврижки. Полезно для каких-нибудь одноразовых тостов или навигационных действий.
Короче, без этих стратегий при повороте экрана у тебя всё начнёт вызываться по десять раз, вьюха будет глючить, как пьяный, и в итоге приложение накроется медным тазом. А так — красота, всё под контролем. Умная штука, ебать мои старые костыли.