写这篇文章的目的仅仅是做个笔记,以供自己和大家参考。
先复习一下Activity的生命周期
1.Fragment介绍
Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。
2.Fragment的生命周期
Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。网上很多图,我就不画了,直接上图,这张图很好的说明了Activity和Fragment生命周期的关系:
方法说明
- onAttach():当Fragment与Activity发生关联时调用
- **onCreate() :创建fragment的时候回调他,在他里面实例化一些变量,这些个变量主要是:当你、暂停、停止的时候,你想保持的数据
- onCreateView():绘制该Fragment的视图,返回一个View。因此不要在这个方法中做太多耗时的操作。由于每次Fragment进入后台后要调用onDestoryView()方法,再次进入前台时会再次调用onCreateView方法,此时可利用if语句进行一些变量初始化的判断,避免重复加载相同的UI,减少资源消耗
- onActivityCreated():当Activity的onCreate方法执行完后会调用此方法
- onStart():和Activity一致,Fragement启动时回调,此时Fragement可见
- onResume():和Activity一致,在Activity中运行是可见的,Fragement 进入前台,可获取焦点时激活
- onPause():和Activity一致,其他的Activity获得焦点,这个仍然可见。第一次调用的时候,指的是用户离开这个fragment(并不是被销毁)
- onStop():和Activity一致,Fragment不可见。一个stopped的Fragment仍然是活着的如果长时间不用也会被移除
- onDestoryView():当该Fragment的视图被移除时调用。销毁相关的UI布局,清除资源。此时需要注意,大家都用过ViewPager + Fragment,由于ViewPager的缓存机制,每次都会加载3页,那么这时就会遇到Fragment重复加载的问题。如果共有4页Fragment,当你滑到第4页时,第一页的Fragment就会调用onDestoryView()销毁UI,当界面再次回到第一页时会调用onCreateView()重新初始化UI
- onDetach():与onAttach相对应,当Fragment与Activity关联被取消时调用