有个旧项目内存泄漏问题,用的是viewpager,页面多次跳转后,内存明显一直在增长,最后发现是viewpager中对fragment的引用导致
所以需要对adapter进行改造,不直接引用fragment,而是fragment的class
open class FragmentPagerAdapter : FragmentStatePagerAdapter {
var fragmentClass: List<Class<*>> = emptyList()
var titles: List<String>? = null
constructor(fm: FragmentManager, list: List<BaseFragment>, titles: List<String>?) : super(fm) {
this.titles = titles
this.fragmentClass = list.map {
it.javaClass
}
}
constructor(fm: FragmentManager) : super(fm)
override fun getItem(position: Int): Fragment {
childCount = position
return (fragmentClass.get(position).newInstance() as BaseFragment) //反射加载Fragment
}
override fun getCount(): Int {
return fragmentClass.size
}
override fun getPageTitle(position: Int): CharSequence? {
return titles!![position]
}
var childCount: Int = 0
override fun getItemPosition(`object`: Any): Int {
return super.getItemPosition(`object`)
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
super.destroyItem(container, position, `object`)
}
}
改造之后,页面跳转内存就平稳了