Максимальный размер транзакции Android IPC?

Я делаю небольшие приложения для Android, которые взаимодействуют друг с другом с помощью Binder.

Насколько я знаю, Android Binder имеет максимальный размер транзакции (1 МБ). Например, TransactionTooLargeException возникает, когда приложения пытаются отправить сообщения размером более 1 МБ с помощью транзакции Binder.

Я не могу понять, почему это ограничено. Есть ли причина ограничивать максимальный размер транзакции? Linux SOCK_STREAM тоже IPC, но у него нет ограничений.

Есть ли разумная причина для этого ограничения? Кажется, документы Android не объясняют, почему они ограничивают размер транзакции до 1 МБ («Буфер транзакций Binder имеет ограниченный фиксированный размер», тогда почему они ограничивают буфер?).

И есть ли критический случай, если фреймворк не ограничивал размер IPC? Насколько я знаю, Linux хорошо работает даже без ограничения максимального размера IPC.


person DeanStark    schedule 04.07.2016    source источник


Ответы (2)


Ограничение существует, чтобы препятствовать использованию Binder для передачи больших объемов данных. Особенно на старых устройствах это может повлиять на другие приложения и, что более важно, на правильное функционирование самой системы. Многие системные компоненты, такие как пользовательский интерфейс, службы и т. д., довольно сильно зависят от Binder.

Хотя другие формы IPC могут быть предназначены для передачи больших объемов данных, это не относится к Binder. Вместо этого Android предлагает другие способы достижения этого, такие как отправка возможности данных через Binder (например, файловый дескриптор, URI).

person Paul Ratazzi    schedule 11.07.2016
comment
Но почему 1 Мб? Есть ли какая-либо теоретическая база для лимита в 1 МБ? или это просто предположение? - person DeanStark; 12.07.2016

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

https://developer.android.com/reference/android/os/TransactionTooLargeException

person Zhomart    schedule 12.03.2021