Очевидный ответ - серебряной пули не существует, каждый случай надо рассматривать в отдельности. Например, если речь идет о торговле на бирже - любое кэширование более-менее длительное кэширование (больше нескольких секунд) не имеет смысла. Если это профиль какой-то системы - смело можно кэшировать. Сам кэш тоже надо подбирать исходя из задач и предпочтений. Кому SQLite чистый, кому ORM, где вообще через SharedPreferences можно сделать.
В целом более-менее стандартная работа выглядит примерно так: открывается экран -> отображается сразу кэш + одновременно идет запрос в сеть -> кэш + экран обновляется из сети в положительном случае, либо уведомление что данные устаревшие в случае ошибки. Главное – сделать без крашей и сообщать пользователю, что данные старые, не вводя в заблуждение (в идеале указывать "Обновлено в " и точное время)
Само приложение будет более приближенным к реал таиму, кроме данных пользователя все постоянно обновляются
- исходя из этого можно предположить, что ко всему прочему нужно после запуска экрана по таймеру стучаться на сервер за новой инфой. Кэш в этом случае играет роль заглушки, чтобы не отображать пустой экран и может быть заменен красивой картинкой про "нет данных/связи"