Предел данных удаленного метода Android - PullRequest
3 голосов
/ 08 декабря 2011

для моего приложения мне нужно передать данные между моей деятельностью и службой, которые находятся в разных процессах. Я знаю, что Google рекомендует сохранять данные, передаваемые при отправке, как минимум (не для полноразмерных растровых изображений). Применяется ли аналогичная политика, когда вы общаетесь со службой через AIDL и хотите передать данные с помощью удаленных вызовов методов?

Ответы [ 2 ]

7 голосов
/ 28 декабря 2011

http://developer.android.com/reference/android/os/TransactionTooLargeException.html

"Во время удаленного вызова процедуры аргументы и возвращаемое значение вызова передаются как объекты Parcel, хранящиеся в буфере транзакций Binder. Если аргументы или возвращаемое значение слишком великичтобы поместиться в буфер транзакций, вызов завершится неудачно, и будет выдано исключение TransactionTooLargeException.

Буфер транзакций Binder имеет ограниченный фиксированный размер, в настоящее время 1 МБ, который используется всеми транзакциями, находящимися в процессе выполнения. "

Так что, похоже, никогда не следует отправлять аргументы размером более 1 МБ.Конечно, вы можете потерпеть неудачу и с аргументами меньшего размера, как объяснено на сайте Android выше.

1 голос
/ 08 декабря 2011

Я не уверен насчет AIDL, но обычно вы действительно хотите, чтобы Intent дополнительные функции были минимальнымиЛучшим решением может быть внедрение собственного ContentProvider и использование его для предоставления данных другому процессу.Это позволит осуществлять управляемую передачу данных и предоставляет вам все дополнительные средства защиты, которые предоставляет API ContentProvider.

...