본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] TransactionTooLargeException 에 대한 이야기

by 돼지왕 왕돼지 2017. 4. 16.
반응형

 [android] TransactionTooLargeException 에 대한 이야기


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


1mb, Android, Argument, array, binder transaction, binder transaction buffer, exception, fixed size, large bitmap, large memory case, Operation, parcel object, process, remote call, return value, share, transaction, transaction buffer, transactiontoolargeexception, [android] TransactionTooLargeException 에 대한 이야기, 동시 처리



-

Binder transaction 이 너무 큰 operation 으로 실패하는 경우에 발생한다.



-

remote call 시 argument 나 return value 는 Parcel object 의 형태로 전송되며, 이 녀석이 Binder transaction buffer 에 저장이 된다.

만약에 argument 나 return value 가 transaction buffer 에 담기 너무 큰 용량이 되면 TransactionTooLargeException 이 발생한다.



-

Binder transaction buffer 는 현재 1MB 라는 fixed size 를 가지고 있다.

이 1MB 는 해당 process 가 처리하고 있는 모든 transaction 이 share 를 해서 사용을 한다.

그래서 이 exception 은 적은 양의 transaction 요청을 하더라도, 동시적으로 처리하고 있는 transaction 이 많으면 충분히 발생할 수 있다.



-

TransactionTooLargeException 이 발생한 경우는 2가지 경우로 나뉜다.

하나는 argument 가 너무 커서 아예 transaction 이 발생하지 않는 경우이고,

다른 하나는 return value 문제로 return 을 제대로 하지 못할 경우이다.

심각한 것은 어떤 경로로 이 exception 이 발생했는지 판단은 할 수 없다는 것이다.



-

TransactionTooLargeException 을 피하는 방법은 모든 transaction 을 가급적 적게 가져가는 것이다.

가장 빈번하게 전달되는 large memory case 는 array 와 large bitmap 이다.




반응형

댓글