Android IPC максимальный размер транзакции?
Я делаю небольшие приложения для Android, которые общаются друг с другом с помощью Binder.
Как я знаю, Android Binder имеет максимальный размер транзакции (1 МБ). Например, TransactionTooLargeException
генерируется, когда приложения пытаются отправить сообщения размером более 1 МБ с помощью транзакции Binder.
Я не могу понять, почему это ограничено. Есть ли основания ограничивать максимальный размер транзакции? Linux SOCK_STREAM
тоже IPC, но у него нет предела.
Есть ли разумная причина для такого ограничения? Кажется, что документы Android не объясняют, почему они ограничивают размер транзакции до 1 МБ ("Буфер транзакций Binder имеет ограниченный фиксированный размер", тогда почему они ограничивают буфер?).
И есть ли критический случай, если фреймворк не ограничивал размер IPC? Как я знаю, Linux работает хорошо даже без ограничения максимального размера IPC.
2 ответа
В официальных документах указано 1 МБ. Для больших данных лучше использовать, как предложил Пол: Binder с файловыми дескрипторами, разделяемой памятью или другим IPC (например, сокетами).
https://developer.android.com/reference/android/os/TransactionTooLargeException
Существует ограничение, препятствующее использованию Binder для передачи больших объемов данных. Особенно на старых устройствах это может повлиять на другие приложения и, что более важно, на правильное функционирование самой системы. Многие системные компоненты, такие как пользовательский интерфейс, службы и т. Д., В значительной степени зависят от Binder.
Хотя другие формы IPC могут быть предназначены для передачи больших объемов данных, это не относится к Binder. Вместо этого Android предлагает другие способы достижения этой цели, такие как отправка возможности данных через Binder (например, дескриптор файла, URI).