Мне сложно представить более болезненную проблему в современном софте, чем то насколько же всем пофиг на сохранение состояния в приложениях.
Мои ожидания от мира по этому вопросу выглядят примерно так:
- Если я сам явно не закрывал приложение, а его там, например, потушила система, то приложение должно развернуться максимально в том виде, который в "недавних" показывается.
- Если я сам закрыл приложение кнопкой назад, убил его из недавних или даже ребутнулся, то с некоторыми шансами я всё равно хочу, чтобы оно восстановилось в максимально близком виде к тому, каким я его помню.
- И бонусное, если я навигируюсь по приложению вглубь и обратно, то всё происходящее на текущем и более высоких уровнях навигации в абсолютном большинстве случаев должно оставаться на своих местах, чтобы я мог на них спокойно вернуться.
Предположим, вы инстаграм, реддит или тикток. Я как пользователь листаю эту вашу бесконечную ленту на главном экране. Отвлёкся, ответил на звонок там, или вдруг поработать приспичило посреди рабочего дня пока рилсы листал. И, конечно же, развернув приложение через каких-нибудь полчаса я никогда в жизни уже не вернусь в это состояние, потому что вы решили мне вместо него навалить рандома и отмотать к самому верху. Буквально, я вижу в "недавних" в приложении какой-то пост, нажимаю на приложение, а внутри его нет. Это какой-то позор. Пример с лентами, наверно, самый показательный. На моей памяти только приложение твиттера в этом смысле делает то, что я от него ожидаю: оно меня оставляет именно в том положении скролла, в котором я был в последний раз. Я всё понимаю, алгоритмические ленты, пагинация, всё такое, сложно, но в моей картине мира в проектах с таким количеством пользователей и разработчиков это вообще базово необходимая вещь.
Что касается последнего пункта, то это самые большие страдания для пользователя. Обожаю кейс, когда при открытии приложения восстанавливается какая-то последняя активити, с которой "назад" ты переходишь в никуда. И так по кругу, ситуация безвыходная, если не знать, что нужно убить приложение. 😐
Или когда ты нажимаешь на экране какую-то кнопочку, а весь стек активити почему-то пересоздался с нуля вместо ожидаемого пуша нового экрана. А это всё, например, потому что кнопочка на самом деле ведёт на свой же диплинк, который так исторически обрабатывается. 👍
До кучи одной строкой ещё вспомним как половина мира пытается решить проблему смены конфигураций, залочив портретный режим. 🧠
Это в том числе самокритика, если что. Если бы мне платили каждый раз, когда я в продуктовом коде вижу, что кто-то стейт пытался сохранить, то я бы был самым бедным из людей, как говорится. Хвала богам хоть в библиотеках, которые мы используем, чаще всего кто-то об этом подумал.
Несмотря на внешнюю похожесть проблем у них у всех очень разные причины. Где-то разработчик торопился или вообще не знал как написать правильно, где-то при составлении требований просто забыли огромный UX-критикал пласт, где-то и систему поругать можно за излишнюю сложность корректного восстановления состояния. А добивает это всё то, что тестировать его сложно, сильно уж краевой случай, поэтому руки туда редко доходят. Так и живём.