Где хранятся данные onSaveInstanceState()?

Посмотреть в Telegram: @AndroidSobes/209
Метод onSaveInstanceState() используется для сохранения состояния активити при изменении конфигурации.
onSaveInstanceState() сохраняет данные в объекте Bundle, который реализует ассоциативный массив (хранилище вида ключ-значение).

Ранее мы писали, что данные, сохраненные через onSaveInstanceState(), переживают остановку процесса приложения. Это значит, что Bundle хранится не в памяти приложения.

Также известно, что onSaveInstanceState() не сохраняет данные на диске. Это можно понять потому, что состояния приложений не могут быть восстановлены после перезагрузки девайса. Кроме того документация класса Parcel, который используется для сохранения Parcelable объектов в Bundle, не рекомендует использовать Parcel для persistent storage.

Где же сохраняется Bundle из onSaveInstanceState()?

Ответ: в системном классе ActivityManagerService, о котором мы уже писали в посте о запуске приложения.

Для каждой запущенной активити создается инстанс класса ActivityRecord. Этот класс имеет поле icicle типа Bundle. Именно в это поле сохраняется состояние после вызова onSaveInstanceState().

При остановке активити Bundle отправляется в системный процесс через Bindler IPC. Далее на классе ActivityManagerService вызывается метод activityStopped(), который принимает объект Bundle. Этот метод находит ActivityRecord, соответствующий остановленной активити и записывает полученный Bundle в поле icicle класса ActivityRecord.

Данная реализация не задокументирована и может быть изменена в будущих версиях Android.