java - 碎片内存泄漏
问题描述
我只有一个活动,所有导航都是通过片段解决的。如果我打开片段并返回,片段将仍在内存中,并且内存将不断增长。
我究竟做错了什么?我必须手动删除侦听器吗?在onDestroy
方法中,getView
已经为空。
我如何添加片段:
fun replaceFragment(
fragmentManager: FragmentManager?,
fragment: Fragment?,
frameId: Int,
tag: String?
) {
if (fragmentManager != null && fragment != null) {
val previousFragment = fragmentManager.findFragmentById(frameId)
if (fragment != previousFragment) {
val transaction = fragmentManager.beginTransaction()
transaction.replace(frameId, fragment, tag)
transaction.addToBackStack(tag)
transaction.commitAllowingStateLoss()
}
}
}
通过后退按钮关闭片段:
编辑:我如何创建片段
companion object {
fun create(number: Long): ManageUnitFragment {
val fragment = ManageUnitFragment()
val params = Bundle()
params.putLong(Keys.Number, number)
fragment.arguments = params
return fragment
}
}
我如何设置监听器(在按钮上)
import kotlinx.android.synthetic.main.myFragment.*
vMyButton.setOnClickListener {
myAction()
}
编辑如果我删除这一行vButtonClose.setOnClickListener...
,ManageUnitFragments 将不再在堆转储中。
管理单元片段:
import kotlinx.android.synthetic.main.fragment_manage_unit.*
class ManageUnitFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_manage_unit, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
vButtonClose.setOnClickListener {
activity?.onBackPressed()
}
}
companion object {
fun create(unitNumber: Long, wagonWagonUnit: WagonUnit): ManageUnitFragment {
val fragment = ManageUnitFragment()
return fragment
}
}
}
解决方案
您是否尝试添加“许多”片段?你真的明白了OutOfMemoryException
吗?
也许他们只是留在记忆中,直到需要更多记忆。然后它们将被垃圾收集。
推荐阅读
- java - Guice:在方法中添加依赖项
- typescript - 如何从不可变对象类型中提取可变对象类型
- c# - 具有无关的额外参数和 DTO 在域层中执行 IRepository
- ember.js - 查找使用“createRecord”创建且 ID 值为空的 Ember-Data 行?
- r - 使用聚合函数找到每组不为零的最小值
- ios - UIlabel 中的动画文本
- scala - 如何在 Slick 中使用 group by 执行多重求和?
- docker - 在生产环境中部署使用docker构建的laravel时找不到404
- c# - MVC 路由问题如何设置所有控制器的默认操作?
- c# - 如何在使用运行时和探测构建后创建 .dlls 的默认目录?