1.Android中v4包下Fragment和app包下Fragment的区别是什么?
v4 包下的Fragment是兼容到Android1.6版本的。
2.Fragment的生命周期 & 请结合Activity的生命周期再一起说说。
onAttach onCreate onCreateView onActivityCreate onStart onResume onPause onStop onDestoryView onDestory onDetach
3.说说Fragment如何进行懒加载。
关键方法:setUserVisibleHint()是否对用户可见,onViewCreate:View是否创建完毕
4.ViewPager + Fragment结合使用会出现内存泄漏吗 & 如何解决?
ViewPager在使用FragmentPagerAdapter时候,当Fragment被销毁而List集合仍然持有Fragment的引用。1. List集合中保存Fragment的Class List<Class>
,通过反射Class的newInstance创建新的Fragment实例。List引用对象为强引用。
5.Fragment如何和Activity进行通信 & Fragment之间如何进行通信?
- Fragment如何和Activity进行通信: setArgument(Bundle) 和 接口回调
- Fragment之间如何进行通信:通过宿主Activity实现或者ViewModel+LiveData。
6.给我谈谈Fragment3种切换的方式以及区别 & 使用场景。
- add() & remove():replace()实际上是调用 add() 和 remove() 方法remove 如果Fragment没有被加入回退栈中,Fragment实例会直接被销毁。add 方法向Activity添加Fragment实例
- show() & hide():hide() 和 show() 不会重新创建Fragment,保留Fragment引用。
- attach() & detach:调用detach是从ViewTree删除视图,Fragment的状态由FragmentManager保存,在使用attach方法会重新调用onCreateView重绘视图。使用此方法注意重复创建View造成的滑动卡顿问题,可通过view的parent的removeView删除与当前view的关联来解决。
remove 和 detach 区别在于:
remove:onPause->onStop->onDestroyView->Destory->onDetach
detach:onPause->onStop->onDestroyView
7.getFragmentManager,getSupportFragmentManager,getChildFragmentManager之间的区别?
getFragmentManager和getSupportFragmentManager主要区别在于V4包中默认兼容1.6以上的版本。
getChildFragmentManager属于Fragment中:
8.FragmentPagerAdapter和FragmentStatePagerAdapter区别?
区别在于onDestroyItem方法中。FragmentPagerAdapter会调用detach方法移除Fragment视图,但是List集合中仍然持有Fragment的引用。FragmentStatePagerAdapter调用remove方式销毁Fragment实例,在销毁Fragment之前会保存当前Fragment的操作状态saveInstance,再次创建时根据保存的操作状态创建新的Fragment。
9.Fragment如何实现类似Activity栈的压栈和出栈效果的?
FragmentManager实现压栈出栈效果。FragmentTransition记录每一次操作轨迹,通过是否调用addToBackStack设置标识位mAddToBackStack来判断是否要将此次操作加入返回栈。
addToBackStack相对操作。popBackStack