美文网首页
TransactionTooLargeException 解决

TransactionTooLargeException 解决

作者: 苏未_ | 来源:发表于2024-06-26 18:16 被阅读0次
    image.png

    原因是使用了Fragment+ViewPager2+FragmentStatePagerAdapter
    如果使用了 FragmentStatePagerAdapter 作为 fragment 适配器,为了尽可能过缓存下浏览过的 fragment 以获得更好的体验,承载多个 FragmentStatePagerAdapter#saveState 会被调用并对每一个 fragment 的 bundle 数据进行保存。并且保存下来的 bundle 并不会因为 fragment 被销毁而销毁,所以需要保存的 bundle 数据会一直增长,直到出现TransactionTooLargeException 异常

    FragmentStateAdapter源码:
    FragmentStateAdapter saveState.png

    stackoverflow的解决方案
    上面的解决方案是重写saveState方法,但是最新的代码已经无法实现重写了

    image.png
    解决方案:

    最终是在Fragment中,通过argument获取完数据后,马上调用arguments.clear方法,将数据清空,这样在saveState的时候就不会保存大量数据了

    Tips:此工具 toolargetool 可以在开发中实时观测页面内存变化。

    相关文章

      网友评论

          本文标题:TransactionTooLargeException 解决

          本文链接:https://www.haomeiwen.com/subject/rajscjtx.html