微信公开课小程序热门讨论「Fragment销毁时replace和add两个方法的区别」最新回复-fragment使用hide和show不会再经过一次oncreate等生命周期,即不会销毁再创建而使用replace每次都会销毁然后重新oncreate创建
1.replace方式transaction.replace(R.id.content,IndexFragment);2.add-hide-show方式transaction.add(R.id.content,IndexFragment); transaction.hide(otherfragment); transaction.show(thisfragment);而上面按钮中出现bug的就是采用第二种方式。然后我们来分析下用add,hide,show为什么出现这种bug,我把每个操作都打印出了以下日志:复现bug的操作是:1.首先打开,默认选中的是第一个tab,如上面的一张图片正常那样。2.切换到tab2,并把tab1hide掉;3.再切回到tab1,并不会触发tab1对应fragment的任何生命周期;4.然后home键进入后台,我在activity的onPause()中手动对IndexFragment赋空,模拟长时间后台,系统销毁了该引用。IndexFragment=null;5.再次启动,其实tab1的fragment实例在内存中还在,只是他的引用被销毁了。6.再切到tab2,这里其实是先把tab1的hide,在showtab2,但是tab1的fragment引用为空,所以无法hide,就出现了tab2叠在tab1上的花屏情况。7.再切到tab1,tab1就会重复创建对象。同样的操作,我们使用replace的方式使用replace方式,虽然这种方式会避免上述的bug,但也是重复创建了对象。因为replace方式,对应的FrameLayout只有一层,而add方式,这个FrameLayout其实有2层。但是这种方式的缺点是:每次replace会把生命周期全部执行一遍,如果在这些生命周期函数里拉取数据的话,就会不断重复的加载刷新数据。那么最合适的处理方式是这样的:1.在add的时候,加上一个tab参数transaction.add(R.id.content,IndexFragment,”Tab1″);2.然后当IndexFragment引用被回收置空的话,先通过IndexFragment=FragmentManager.findFragmentByTag(“Tab1″);找到对应的引用,然后继续上面的hide,show; 更多有关「Fragment销毁时replace和add两个方法的区别」的疑问请扫码关注微信公开课+小程序!了解更多
方法1:微信扫描微信公开课小程序码即可订阅热议话题「Fragment销毁时replace和add两个方法的区别」
方法2:微信搜索微信公开课小程序名称进入,即可订阅热议话题「Fragment销毁时replace和add两个方法的区别」
方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热议话题「Fragment销毁时replace和add两个方法的区别」
微信公开课小程序热议话题「Fragment销毁时replace和add两个方法的区别」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。
微信公开课热议话题「Fragment销毁时replace和add两个方法的区别」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。