关于Fragment面试的详解

大家好,今天我来给大家讲一讲关于安卓面试中的Fragment的面试题目,那么接下来接入正题:

一、Fragment为什么会被成为第五大组件?

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

众所周知,在安卓中中有四大组件,分别是Activity,广播,service,Content provider.在实际项目开发过程中,Fragment的使用频率和作用都是十分突出的,所以说在这里把Fragment列为第五大组件也是可以的.有些说法把view列为第五大组件,但是由于view没有生命周的,这是和Fragment的不同之处.有了生命周期,Fragment可以像activity灵活的进行处理.

Fragment为什么会出现呢?

它其实是在安卓3.0出现的,起初啊,它只是为了给大屏幕设备上更加灵活的展现UI所设计的.

Fragment的优点:Fragment相比Activity更加节省内存,同时UI的切换效果也更加的舒适.

综上所述,大家可以这样回答:首先在使用频率上,Fragment是不属于其它四大组件的,它有自己的生命周期,同时它可以动态灵活的加载Activity,所以说Fragement可以被称为第五大组件,同时Fragment并不是像Activity一样完全独立的,它虽然有自己的生命周期,但是它必须依附与Activity,同时它要加载到Activity当中.

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

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

把Fragment直接写入Activity布局当中,作为XML的一个标签

2)动态在Activity中添加Fragment(动态加载)

它使用的是FragmentManager来管理所有要启动的Fragment,利用FragmentTransaction添加和替换相对应的Fragment,并用容器资源来作为标记位,设置Fragment所要显示到的Activity当中的位置,最后,需要提交commit方法来完成整个步骤.

3.FragementPagerAdapter与FragmentStatePagerAdapter区别

FragementPagerAdapter适用于页面较少的情况,而FragmentStatePagerAdapter用于页面较多的情况.

我看了一下源码,首先来看FragmentStatePagerAdapter

在destroyItem这个方法中,最后一行,它使用的是mCurTransaction.remove(fragment)方法,它是真正的释放了Fragment 的内存FragmentStatePagerAdapter是比FragementPagerAdapter更加节省内存的.

我们再来看FragementPagerAdapter

在destroyItem这个方法中,它最后一行,它是调用了mCurTransaction.detach((Fragment)object);这个方法意味着什么,它并不是真正的内存回收,它只是把fragment的UI和Activity的UI所脱离开来,它并不会收内存.

所以我们可以这样回答:

由于FragmentStatePagerAdapter在每次切换Viewpager的时候,它是回收内存的,所以说它适合那些页面比较多的情况,因为页面比较多的时候,比较耗费内存,它会回收内存.而FragementPagerAdapter,它并没有回收内存,它只是把UI分离,所以说它适合页面比较少的情况,保存一下内存,对系统也没有多大影响

二、Fragment的生命周期

首先,我们来看一下官网上面的生命周期图

可以看到 Fragment 的生命周期和 Activity 很相似,只是多了以下几个方法:
onAttach() 在Fragment 和 Activity 建立关联是调用(Activity 传递到此方法内)
onCreateView() 当Fragment 创建视图时调用
onActivityCreated() 在相关联的 Activity 的 onCreate() 方法已返回时调用。
onDestroyView() 当Fragment中的视图被移除时调用
onDetach() 当Fragment 和 Activity 取消关联时调用。

 

可以看下几种操作情况下Fragment 的生命周期变化

管理 Fragment 生命周期和 Activity 生命周期很相似,同时 Activity 的生命周期对 Fragment 的生命周期也有一定的影响,如下图:

用下图来表示 Activity 和 Fragment 的生命周期变化的先后过程是:

Fragment 生命周期与 Activity 生命周期的一个关键区别就在于,Fragment 的生命周期方法是由托管Activity而不是操作系统调用的。Activity 中生命周期方法都是 protected,而 Fragment 都是 public,也能印证了这一点,因为 Activity 需要调用 Fragment 那些方法并管理它。

 

三、Fragment之间的通信

1.fragment与activity之间的通信

只要调用getActivity,就可以获取到Activity中的方法

2.fragment与fragment之间的通信

和fragment中调用Activity方法有相同地方,首先,可以通过getActivity获取Activity方法,然后通过findFragmentByid取到Activity中所对应的另外一个Fragment的方法,这样就实现了fragment与fragment的通信

3.activity与fragment之间的通信

常用的方法是接口回调,你在fragment中创建一个接口,然后Activity来实现,这样就能完成Activity调用Fragment中的方法

四、Fragment管理器:FragmentManager

Fragment的replace、add、,remove方法;

add是将fragment的实例添加到Activity的最上层,而remove大家都知道,它就是将fragment的实例从activity与fragment队列中删除

而replace与add的区别就是,它是替换activity的实例,不是直接把fragment直接加到activity上层,它是把activity最上层的fragment替换成它想替换的fragment.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试中,可能会涉及到关于Fragment的一些常见问题,以下是一些可能会被问到的问题及其答案: 1. 什么是FragmentFragment是Android中的一种可重用的组件,它可以与Activity进行交互,作为Activity界面的一部分进行展示。它可以有自己的布局和生命周期,并且可以被添加、移除、替换或者在Activity中进行切换。 2. Fragment的生命周期是什么样的? Fragment的生命周期包括以下几个方法:onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy和onDetach。这些方法提供了在Fragment生命周期中不同阶段执行代码的机会,开发者可以在这些方法中处理相关的逻辑。 3. Fragment和Activity之间的通信方式有哪些? Fragment和Activity之间可以通过接口回调、广播、观察者模式等方式进行通信。其中,接口回调是最常见的方式,Activity可以实现一个接口,Fragment通过该接口将数据传递给Activity。广播和观察者模式可以用于更复杂的场景,可以实现多个Fragment和Activity之间的通信。 4. FragmentPagerAdapter和FragmentStatePagerAdapter有什么区别? FragmentPagerAdapter和FragmentStatePagerAdapter都是ViewPager的适配器,用于管理Fragment的切换。区别在于FragmentPagerAdapter会保留Fragment的状态,而FragmentStatePagerAdapter会销毁之前的Fragment,适用于有大量Fragment的情况。 5. getFragmentManager、getSupportFragmentManager和getChildFragmentManager有什么区别? getFragmentManager是用于获取与当前Fragment关联的FragmentManager,通常用于在Fragment中获取父级Activity的FragmentManager。getSupportFragmentManager是Support库中的方法,用于获取兼容版本的FragmentManager,通常用于在Support库中使用Fragment。getChildFragmentManager是用于获取Fragment中嵌套的子级FragmentManager,通常用于在一个Fragment中管理另一个Fragment。 以上是一些关于Fragment的常见面试题及其答案。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值