Выбор ответа Senior Жизненный цикл Activity и Fragment обновлено
TransactionTooLargeException и Bundle
Вопрос
Почему приложение может упасть с TransactionTooLargeException при сворачивании?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В onSaveInstanceState положили много данных, а буфер Binder ограничен. Сохранённое состояние передаётся в системный процесс через Binder, а буфер транзакций процесса около 1 МБ общий на все транзакции.
Варианты ответа
- Слишком много Activity в back stack: каждая сохраняет состояние, и система не успевает
- В
onSaveInstanceStateположили много данных, а буфер Binder ограниченправильный ответ - Нехватка места на диске, куда система сохраняет Bundle при сворачивании
- Слишком долгий
onPause: система прерывает транзакцию сохранения по таймауту
Разбор
Сохранённое состояние передаётся в системный процесс через Binder, а буфер транзакций процесса около 1 МБ общий на все транзакции. Списки, картинки или большие Parcelable в Bundle его переполняют. В Bundle кладут только идентификаторы и небольшое состояние UI, а данные берут из базы или кеша. Число Activity, диск и onPause к этому исключению не относятся.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Жизненный цикл Activity и Fragment»
- Состояния Lifecycle
- Что переживает поворот и смерть процесса
- Жизненный цикл фрагмента и его view
- Гарантирован ли onDestroy
- Почему onPause должен быть быстрым
- Когда вызывается onSaveInstanceState
- Порядок колбэков Activity от запуска до закрытия
- Жизненный цикл фрагмента