Зачем мне нужно setRetainInstance или onSaveInstance, если я могу использовать android: configChanges = "keyboard | orientation | screenLayout"

Зачем мне нужно использовать setRetainInstance() или onSaveInstance() для сохранения состояния, и я могу использовать android:configChanges="keyboard|orientation|screenLayout" и получить «состояние состояния без состояния пользовательского состояния» ? Я имею в виду с меньшей головной болью.

Не используйте android:configChanges . Это сломает вещи тонким образом и не позволит Android получить правильную компоновку / тему / размеры и т. Д. Для текущей конфигурации.

onSaveInstanceState() полностью ортогонален этому: вам нужно сохранить состояние, чтобы восстановить его, если Android убивает ваш процесс, чтобы сохранить память. configChagnes предотвращает повторное создание активности при вращении, изменении состояния клавиатуры и т. Д.

setRetainInstance() предназначен для фрагментов, которые вы не хотите создавать повторно на ротации устройства и т. Д. Если вы его не назовете, Android будет сериализовать свое состояние в Bundle и воссоздать их вместе с родительской активностью.

Короче говоря, в то время как configChanges кажется «ярлыком», это не так. Не полагайтесь на это и не сохраняйте / не восстанавливайте состояние по мере необходимости, используя соответствующие инструменты для каждого случая.