Android技术栈(二)Fragment生命周期

Fragment生命周期流程图

        Fragment是Android的视图生命周期控制器,与Activity相比,它只占用更少的资源,并且提供更大的灵活性,兼容性等。即使是在性能较差的平台上也能十分流畅的运行,并且能将过渡动画兼容到更低的版本。

        现在的Fragment的功能已经很强大了,足以在很多场合替代Activity的存在,安卓大神级开发者JakeWharton曾经说过,一个App只需要一个Activity,说的就是单Activity多Fragment模式。

一些有用的回调函数,以及他们发生的时机

        看到上面那张图你可能都烦了,不过其实不需要全部掌握,了解部分即可。

        Activity因为比较简单且网上的资料颇多我就不展开讲了,而Fragment就比较操蛋,这里介绍一些Fragment的的回调函数:

        1.onInflate(Context,AttributeSet,Bundle)只有硬编码在xml中的Fragment(即使用fragment标签)才会调用该方法,与自定义View十分类似,在实例化Xml布局时该方法会被调用

        2.onAttach(Context):执行该方法时,Fragment与Activity已经完成绑定,该方法传入一个Context对象,实际上就是该Fragment依附的Activity,此时调用getActivity将不会返回null,但是Activity#onCreate可能还有没有执行。

        3.onCreate(Bundle):用来初始化Fragment。可通过参数savedInstanceState获取之前保存的值。

        4.onCreateView(LayoutInflater,ViewGroup,Bundle):需要返回一个View用来初始化Fragment的布局。默认返回null,值得注意的是,若返回null Fragment#onViewCreated将不会执行。使用ViewPager+Fragment时此方法可能会被多次调用。

        5.onActivityCreated(Bundle):执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,若在此之前与Activity交互,若引用了未初始化的资源会应发控制在异常。

        6.onStart():执行该方法时,Fragment由不可见变为可见状态。

        7.onResume():执行该方法时,Fragment处于活动状态,用户可与之交互。

        8.onPause():执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。

        9.onSaveInstanceState(Bundle):保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。

        10.onStop():执行该方法时,Fragment完全不可见。

        11.onDestroyView():销毁与Fragment有关的视图,但未与Activity解除绑定,一般在这个回调里解除Fragment对视图的引用。通常在ViewPager+Fragment的方式下会调用此方法,并且与Fragment#onCreateView一样可能是多次的。

        12.onDestroy():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法,此时应该清理Fragment中所管理的所有数据。

        13.onDetach():解除与Activity的绑定。在onDestroy方法之后调用。若在此时getActivity,你将会得到一个null。

        Fragment其实就是一个带了生命周期的自定义ViewGroup,由于有些场景跟生命周期密切相关,可以使用Fragment。但如果与生命周期相关程度不大,那么还是推荐使用自定义View来完成这部分工作,因为Fragment还是比较重量级的,所有FragmentTransaction(碎片事务)都是异步执行的,虽然他会保证在下一次VSYNC(下一帧渲染)前调用,但是还是会造成有一段时间你的UI不在你的控制之内。

        当然,有限的控制手段当然存在的,当在提交碎片事务的时候还是允许你对他进行一些控制,你可以尝试使用FragmentTransaction#runOnCommit。

你可能感兴趣的:(Android技术栈(二)Fragment生命周期)