Ответ
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()