Выбор ответа Senior Жизненный цикл Activity и Fragment обновлено

TransactionTooLargeException и Bundle

Вопрос

Почему приложение может упасть с TransactionTooLargeException при сворачивании?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В onSaveInstanceState положили много данных, а буфер Binder ограничен. Сохранённое состояние передаётся в системный процесс через Binder, а буфер транзакций процесса около 1 МБ общий на все транзакции.

Варианты ответа

  1. Слишком много Activity в back stack: каждая сохраняет состояние, и система не успевает
  2. В onSaveInstanceState положили много данных, а буфер Binder ограниченправильный ответ
  3. Нехватка места на диске, куда система сохраняет Bundle при сворачивании
  4. Слишком долгий onPause: система прерывает транзакцию сохранения по таймауту

Разбор

Сохранённое состояние передаётся в системный процесс через Binder, а буфер транзакций процесса около 1 МБ общий на все транзакции. Списки, картинки или большие Parcelable в Bundle его переполняют. В Bundle кладут только идентификаторы и небольшое состояние UI, а данные берут из базы или кеша. Число Activity, диск и onPause к этому исключению не относятся.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.