2016-07-04 4 views
2

나는 바인더를 사용하여 서로 통신하는 작은 안드로이드 응용 프로그램을 만들고 있습니다.Android IPC 최대 거래 크기?

아시다시피 Android Binder에는 최대 트랜잭션 크기 (1MB)가 있습니다. 예를 들어, 응용 프로그램에서 바인더 트랜잭션을 사용하여 1MB보다 큰 메시지를 보내려고하면 TransactionTooLargeException이 발생합니다.

왜 이것이 제한되어 있는지 이해할 수 없습니다. 최대 거래 규모를 제한 할만한 이유가 있습니까? Linux SOCK_STREAM도 IPC이지만 제한이 없습니다.

한계가있는 이유는 무엇입니까? 안드로이드 문서가 트랜잭션 크기를 1MB로 제한하는 이유를 설명하지 못하는 것 같습니다 ('Binder 트랜잭션 버퍼의 크기가 제한되어 있습니다. 그런데 왜 버퍼를 제한합니까?').

프레임 워크가 IPC 크기를 제한하지 않는 경우 중요한 사례가 있습니까? Linux는 최대 IPC 크기에 제한이 없어도 잘 작동한다는 것을 알고 있습니다.

답변

0

많은 양의 데이터를 전송할 때 바인더 사용을 제한하는 데 한계가 있습니다. 특히 오래된 장치에서는 이렇게하면 다른 응용 프로그램에 영향을 줄 수 있으며 더 중요한 것은 시스템 자체가 올바르게 작동 할 수 있습니다. 사용자 인터페이스, 서비스 등과 같은 많은 시스템 구성 요소는 바인더에 상당히 의존합니다.

대용량의 데이터를 전송하기 위해 다른 형태의 IPC가 설계되었지만 Binder에는 해당되지 않습니다. 대신 Android는 바인더 (예 : 파일 설명자, URI)를 통해 데이터에 기능을 전송하는 등 다른 방법으로이를 수행 할 수 있습니다.

+1

하지만 왜 1MB입니까? 1MB 제한에 대한 이론적 근거가 있습니까? 아니면 그냥 가정일까요? – DeanStark