2016-07-04 6 views
2

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

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

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

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

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

ответ

0

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

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

+1

Но почему 1MB? Есть ли теоретическая база для ограничения 1 МБ? или это просто предположение? – DeanStark