Android开发过程中遇到TransactionTooLargeException

主要由以下几个原因造成:

1.使用 Intent 直接在活动之间传递大对象或大数据集。

2.使用 Bundle 在活动之间传递的数据量过大。

3.在 onSaveInstanceState 中保存过多的数据。

解决方案:

1.创建一个单例的数据管理类,用于存储需要在 ActivityFragment 之间传递的数据。在跳转时,只传递数据的索引或标识符,而不是传递整个数据对象。目标 Fragment 再根据索引或标识符从数据管理类中获取数据。

// 数据管理类
object DataManager {
    private val dataMap: MutableMap<String, Any> = mutableMapOf()

    fun saveData(key: String, data: Any) {
        dataMap[key] = data
    }

    fun getData(key: String): Any? {
        return dataMap[key]
    }
}
// 在源 Fragment 中保存数据
DataManager.saveData("myData", yourLargeData)

// 在源 Fragment 中跳转到目标 Fragment,只传递标识符
val bundle = Bundle()
bundle.putString("dataKey", "myData")
targetFragment.arguments = bundle



// 在目标 Fragment 中获取数据
val dataKey = arguments?.getString("dataKey")
val yourLargeData = DataManager.getData(dataKey)

2.当多个fragment由 FragmentManager 管理,且一直通过addToBackStack() 方法将 Fragment 添加到回退栈中时时。

清空回退栈

supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值