AndroidでFatal Exception: java.lang.RuntimeException android.os.TransactionTooLargeException: data parcel size N bytes

現象

  • クラッシュレポートサービスにFatal Exception: java.lang.RuntimeException
    android.os.TransactionTooLargeException: data parcel size 719044 bytes
    というエラー。
  • 具体的にどんなタイミングで起きているかは不明
  • ぐぐると、画面回転時とかIntent時putExtraで大きめデータやりとりとかEditTextとか出てくるけどどれも該当せず。

条件

  • compileSDK:26
  • targetSDK:26
  • 落ちているとレポートがきたOS:Android N, O(7と8)

原因

  • とりあえずやりとりするデータ上限1MBを超えるとOS N(7)以上では落ちてしまう ※機種によっては1MB以下でも落ちる

参考リンク

対策

  • FragmentStatePagerAdapterを用いたViewPager実装をしている場合、バグがありリストへの参照を保持し続けるらしい ※FragmentPagerAdapterはsaveStateがNullなので以下の方法だと落ちます。注意。
  • saveState()メソッドをオーバーライドし、 “states”にNullを入れて何も格納しないようにする

参考リンク

まとめ

日本語で同じ問題の記事にたどり着けなかったので書いてみましたが、あまりViewPagerとFragmentStatePagerAdapterの組み合わせって使われていないのだろうか