Fragment面试小结


Fragment面试小结,陆续会总结关于Fragment的一些面试点

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

为什么不是View? View没有生命周期

有自己的生命周期,更节省内存,动态灵活的加载到Activity,用户体验更好。

2.Fragment的两种加载方式。

2.1 静态加载方式

XML中直接引用。

2.2 动态加载方式

1
2
3
4
5
6
7
8
9
10
11
FragmentManager manager = getSupportFragmentManager();//拿到fragment的管理器
FragmentTransaction transaction = manager.beginTransaction();//开启事物机制
transaction.replace(R.id.cl_activity,new ContentFragment());//param1:带替换的根布局id param2:替换的fragment。
transaction.replace(R.id.fl_left_Menu,new LeftMenuFragment());//第一个参数是根布局容器的id,第二个参数是待替换的fragment
transaction.commit();//提交改变
//fragment Tag的使用,在创建的时候,为fragment指定一个stringTag,然后可以通过manager的findFragmentByTag方法找到
// transaction.replace(R.id.cl_activity,new ContentFragment(),TAG_LEFT_MENU);
// Fragment fragment = manager.findFragmentByTag(TAG_CONTENT_FRAGMENT);

3.FragmentPagerAdapter与FragmentStatePagerAdapter的区别

主要区别体现在内存的消耗上。

1
2
3
4
5
6
7
8
//FragmentPagerAdapter最终并不会完全释放内存资源,只是分离
mCurTransaction.detach((Fragment)object);
//FragmentStatePagerAdapter是完全释放资源
mCurTransaction.remove(fragment);
//因此FragmentStatePagerAdapter适合做一些滑动较多的板块,页面比较多的时候,回收内存
//FragmentPagerAdapter适合内存少的,因为只是分离 并不是完全释放

4.Fragment的生命周期

4.1生命周期图

4.2 Activity和Fragment的生命周期图对比1

4.3 Activity和Fragment的生命周期图对比2

4.4 fragment声明周期的分析

  1. 当一个fragment被创建的时候,它会经历以下状态.
  • onAttach()
  • onCreate()
  • onCreateView()
  • onActivityCreated()
  1. 当这个fragment对用户可见的时候,它会经历以下状态。
  • onStart()
  • onResume()
  1. 当这个fragment进入“后台模式”的时候,它会经历以下状态。
  • onPause()
  • onStop()
  1. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。
  • onPause()
  • onStop()
  • onDestroyView()
  • onDestroy()
  • onDetach()
  1. 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。
  • onCreate()
  • onCreateView()
  • onActivityCreated()
  1. fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。
  • onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。
  • onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
  • onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
  • onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
  • onDetach() —— 当fragment和activity分离的时候,调用这个方法。

一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

5.Fragment的通信

  • Fragment中调用Activity的方法 getActivity
  • 在Activity中调用fragment的方法 接口回调
  • Fragment中调用Fragment的方法 FindFragmentById

6.Fragment的replace,add,remove方法。

FragmentManager的replace方法,本质是一种把原来的容器id,替换成为我们要替换的fragment

add方法是添加进容器的id里面。

remove移除

野望 wechat
欢迎订阅我的个人微信公众号:yewang1993