一.Fragment简介:
Android在3.0中引入了Fragments的概念,主要目的是用在大屏幕设备上–例如平板电脑上,支持更加动态和灵活的UI设计。平板电脑的屏幕要比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互。Fragment允许这样的一种设计,而不需要你亲自来管理View Hierarchy的复杂变化。通过将Activity的布局分散到Fragment中,你可以在运行时修改Activity的外观,并在由Activity管理的Back Stack中保存那些变化。
其实这只是比较官方一点的说法,其实通俗易懂点说就是,一个可以将activity拆分成几个完全独立封装的可重用的组件,每个组件有自己的生命周期和ui布局。它可以表示Activity中的行为或用户界面部分。我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,以及在多个Activity中重复使用某个Fragment。它有自己的生命周期,能接受自己的输入,并且可以在 Activity 运行时添加或删除Fragment(有点像在不同 Activity 中重复使用的“子 Activity”)。
二.Fragment生命周期:
- onAttach() : Fragment和Activity建立关联的时候调用,被附加到Activity中去。
- onCreate() : 系统会在创建Fragment时调用此方法。可以初始化一段资源文件等等。
- onCreateView() : 系统会在Fragment首次绘制其用户界面时调用此方法。要想为Fragment绘制UI,从该方法中返回的View必须是Fragment布局的根视图。如果Fragment未提供UI,您可以返回null。
- onViewCreated() : 在Fragment被绘制后,调用此方法,可以初始化控件资源。
- onActivityCreated() : 当onCreate onCreateView(),onViewCreated()方法执行完后调用,也就是Activity被渲染绘制出来后。
- onStart() : 当系统调用该方法的时候,fragment已经显示在ui上,但还不能进行互动,因为onResume方法还没执行完。
- onResume() : 该方法为fragment从创建到显示Android系统调用的最后一个生命周期方法,调用完该方法时候,fragment就可以与用户互动了。
- onPause() : 系统将此方法作为用户离开Fragment的第一个信号(但并不总是意味着此Fragment会被销毁)进行调用。 通常可以在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。
- onStop() : 当onStop返回的时候,fragment将从屏幕上消失。
- onDestoryView() : 该方法的调用意味着在 onCreateView 中创建的视图都将被移除。
- onDestroy() : Android在Fragment不再使用时会调用该方法,要注意的是这时Fragment还和Activity相关联的!并且可以获得Fragment对象,但无法对获得的Fragment进行任何操作。
- onDetach() : 为Fragment生命周期中的最后一个方法,当该方法执行完后,Fragment与Activity不再有关联。
顺序如图下:

三.Fragment与Activity关系:
总的来说,Fragment和Activity的生命周期类似。需要注意的是,它相比于Activity,多了onAttach(), onCreateView(), onActivityCreate)和onDestoryView()、onDetach()这几个回调函数;但是,却少了onRestart()。
- onAttach(Activity) : 当Fragment和Activity发生关联时使用
- onCreateView(LayoutInflater, ViewGroup, Bundle) : 创建该Fragment的视图
- onActivityCreate(Bundle) : 当Activity的onCreate方法返回时调用
- onDestoryView() : 与onCreateView相对应,当该Fragment的视图被移除时调用
- onDetach() : 与onAttach相对应,当Fragment与Activity关联被取消时调用
关系图如下:

注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现。
四.总结:
在用法的代码部分参考郭神的博客,感觉郭神在代码讲解部分通俗易懂,看起来也方便。总之,在使用Fragment也有一些注意事项,不是那么完美的,虽然谷歌推荐我们用Fragment来代替Activity来使用,我们也确实这做了,现在基本主流的APP也都是少量Activity+很多Fragment,但也需要避免有些坑慎入。