[android] TransactionTooLargeException 에 대한 이야기 |
http://developer.android.com/reference/android/os/TransactionTooLargeException.html
-
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 이다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Java Concurrency] 객체구성 (0) | 2017.04.18 |
---|---|
[Java Concurrency] 객체공유 (0) | 2017.04.17 |
[android] ContentProviderOperation 에 대한 짧은 이야기 (0) | 2017.04.15 |
[Java Concurrency] 스레드 안전성 (2) | 2017.04.14 |
[android] ListView 에서 RecyclerView 로 migration 하세요. (0) | 2017.04.13 |
댓글