主要由以下几个原因造成:
1.使用 Intent
直接在活动之间传递大对象或大数据集。
2.使用 Bundle
在活动之间传递的数据量过大。
3.在 onSaveInstanceState
中保存过多的数据。
解决方案:
1.创建一个单例的数据管理类,用于存储需要在 Activity
和 Fragment
之间传递的数据。在跳转时,只传递数据的索引或标识符,而不是传递整个数据对象。目标 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)