Android/Intent
Intent extras size limit
parkho79
2019. 3. 20. 09:23
728x90
Intent 관련 글을 쓰다 흥미로운 blog 가 있어 소개한다.
내용을 보면 intent 로 전달하는 extra size 의 한계에 관한 것으로 아래와 같이 요약할 수 있다.
Size limit?
아래와 같이 Intent 에 대량의 data 를 전달하도록 하면 app 이 crash 될 것이다.
Intent intent = new Intent(this, ActivityB.class);
intent.putExtra("bytes", new byte[1000 * 1000]);
startActivity(intent);
Android 6 (API 23) 에서는 exception 발생 시 상세 정보를 알려준다.
android.os.TransactionTooLargeException: data parcel size 1002388 bytes
Android 6 이하 버전에서는 각기 다른 exception 이 발생한다.
java.lang.SecurityException: Unable to find app for caller... when publishing content providers
java.io.IOException: Address already in use
Testing
정확한 size 한계를 측정하기 위해 실험한 결과는 아래와 같다.
(단, intent 자체의 overhead 도 고려해야 되기 때문에 하단의 값이 실제 순수 data size 라고 할 순 없다.)
- API 23: 517716 bytes (520107 bytes incl. overhead);
- API 22: 517876 bytes;
- API 19: 518368 bytes;
- API 16: 518396 bytes;
- API 10: 518580 bytes;
Conclusion
Intent 사용 시 가급적 기본적인 정보만을 arguments 로 사용하고 더 많은 data 를 intent 에 담아야 한다면 아래와 같은 옵션으로 대체할 것을 권장한다.
◼ Data 를 file(임시) 로 저장하고 URI 를 활용한자. (Data 가 큰 용량일 경우 유일한 해결책일 것이다.)
◼ Data 를 Application instance 에 저장하자.
◼ Data 를 singleton 에 저장하자.
728x90