Чем вызвано ограничение памяти у Bundle

«Чем вызвано ограничение памяти у Bundle» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Bundle использует Binder для межпроцессного взаимодействия, а Binder имеет жесткое ограничение на размер транзакции (обычно 1MB). Это ограничение введено для предотвращения нехватки памяти в системном процессе.

Если нужно передать большие данные, лучше использовать:

  • Файлы/ContentProvider
  • Парсинг данных вручную
  • Альтернативные IPC-механизмы (AIDL, Messenger)

Пример проверки размера Bundle:

val bundle = Bundle().apply { 
    putString("largeData", "very_long_string...") 
}
val parcel = Parcel.obtain()
bundle.writeToParcel(parcel, 0)
val size = parcel.dataSize() // проверить размер
parcel.recycle()