这篇文章和上一篇文章同样,基本上都是总结,没有给出实际的log日志和片断代码,我以为这些东西须要本身去实践证明,而不是看到别人贴的代码就认为是对的,上一篇文章是activity的生命周期(总结),后续会一直整理我有道笔记里面总结的一些问题,都是比较实际性的总结,但愿对你们有帮助。数据库
onAttach():
执行该方法时,Fragment与Activity已经完成绑定,该方法有一个Activity类型的参数,表明绑定的Activity,这时候你能够执行诸如mActivity = activity的操做。
onCreate():
初始化Fragment。可经过参数savedInstanceState获取以前保存的值。
onCreateView():
初始化Fragment的布局。加载布局和findViewById的操做一般在此函数内完成,可是不建议执行耗时的操做,好比读取数据库数据列表。
onActivityCreated():
执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内能够进行与Activity交互的UI操做,因此在该方法以前Activity的onCreate方法并未执行完成,若是提早进行交互操做,会引起空指针异常。
onStart():
执行该方法时,Fragment由不可见变为可见状态。
onResume():
执行该方法时,Fragment处于活动状态,用户可与之交互。
onPause():
执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。
onSaveInstanceState():
保存当前Fragment的状态。该方法会自动保存Fragment的状态,好比EditText键入的文本,即便Fragment被回收又从新建立,同样能恢复EditText以前键入的文本。
onStop():
执行该方法时,Fragment彻底不可见。
onDestroyView():
销毁与Fragment有关的视图,但未与Activity解除绑定,依然能够经过onCreateView方法从新建立视图。一般在ViewPager+Fragment的方式下会调用此方法。
onDestroy():
销毁Fragment。一般按Back键退出或者Fragment被回收时调用此方法。
onDetach():
解除与Activity的绑定。在onDestroy方法以后调用。
setUserVisibleHint():
设置Fragment可见或者不可见时会调用此方法。在该方法里面能够经过调用getUserVisibleHint()得到Fragment的状态是可见仍是不可见的,若是可见则进行懒加载操做。ide
一、Fragment建立:
setUserVisibleHint()->onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume();
二、Fragment变为不可见状态(锁屏、回到桌面、被Activity彻底覆盖):
onPause()->onSaveInstanceState()->onStop();
三、Fragment变为部分可见状态(打开Dialog样式的Activity):
onPause()->onSaveInstanceState();
四、Fragment由不可见变为活动状态:
onStart()->OnResume();
五、Fragment由部分可见变为活动状态:
onResume();
五、Fragment退出:
onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()(注意退出不会调用onSaveInstanceState方法,由于是人为退出,没有必要再保存数据);
六、Fragment被回收又从新建立:
被回收执行onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetach(),从新建立执行onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint();
横竖屏切换:与Fragment被回收又从新建立同样。函数
当使用add()+show(),hide()跳转新的Fragment时,旧的Fragment回调onHiddenChanged(),不会回调onStop()等生命周期方法,而新的Fragment在建立时是不会回调onHiddenChanged(),这点要切记。布局
一、 使用FragmentPagerAdapter+ViewPager时,切换回上一个Fragment页面时(已经初始化完毕),不会回调任何生命周期方法以及onHiddenChanged(),只有setUserVisibleHint(boolean isVisibleToUser)会被回调,因此若是你想进行一些懒加载,须要在这里处理。
二、 在给ViewPager绑定FragmentPagerAdapter时,
new FragmentPagerAdapter(fragmentManager)的FragmentManager,必定要保证正确,若是ViewPager是Activity内的控件,则传递getSupportFragmentManager(),若是是Fragment的控件中,则应该传递getChildFragmentManager()。只要记住ViewPager内的Fragments是当前组件的子Fragment这个原则便可。
三、 你不须要考虑在“内存重启”的状况下,去恢复的Fragments的问题,由于FragmentPagerAdapter已经帮咱们处理啦。post
一般状况下都是由于PagerAdapter不是FragmentPagerAdapter形成的,FragmentPagerAdapter内部实现了对setUserVisibleHint()方法的调用,因此须要懒加载的结构最好使用FragmentPagerAdapter +Fragment的结构,少用PagerAdapter。指针