Fragment面试讲解

一、Fragment为什么被称为第五大组件

    1.Fragment为什么被称为第五大组件

            样图左图为平板电脑的使用场景,右图为手机使用场景

            在右图中,左右两个Activity包含了各自的Fragment,在Activity A通过startActivity的方法启动Activity B时,实际上启动的是Fragment B,所以我们一般会在Activity当中嵌套多个Fragment,来进行UI数据结算清换,用到的模式通常是Fragment+ViewPager

            Fragment面试讲解

       2.Fragment加载到Activity的两种方式

        1) 添加Fragment到Activity的布局文件当中(静态加载);

            就是把Fragment直接写入到activity布局当中,作为一个XML的标签。

        2) 动态在activity中添加fragment;

Fragment面试讲解

            第一步,通过getFragmentManager方法创建FragmentManager,然后通过FragmentManager创建FragmentTransaction

              第二步,调用FragmentTransaction里面的add方法

              第三步,调用transaction.commit();这个方法完成动态加载Fragment操作

            

       3.FragmentPagerAdapter与FragmentStatePagerAdapter区别

            此图为FragmentStatePagerAdapter源码截图 可以看到最后一行代码用了transaction.remove的方法,

这个方法在这里是真正的释放了fragment内存的

            Fragment面试讲解

            此图为FragmentPagerAdapter源码截图,可以看到最后一行也是调用了transaction的方法,不过他用的是detach方法。detach,并不是真正的内存回收,他只是把fragmentUI和activity的UI所脱离开来,并不回收内存

            Fragment面试讲解

        所以FragmentStatePagerAdapter和FragmentPagerAdapter的区别就在于,前者可以真正的释放Fragment内存,后者并不能


    在面试当中遇到此类问题可以这样回答:由于FragmentStatePagerAdapter在每次切换ViewPager的时候是回收内存的所以说适合一些页面比较多的情况因为如果页面比较多的话,更耗内存,所以说他会回收内存。而FragmentPagerAdapter我们知道,他并没有回收内存,只是将UI分离,所以说适合一些页面比较少的情况以保存一些内存也对系统内存没有多大影响。