Fragment的生命周期,大家可以参考博客:
http://blog.csdn.net/forever_crying/article/details/8238863/
http://blog.csdn.net/hjj0212/article/details/8530273
http://blog.csdn.net/lmj623565791/article/details/37970961/
通过观察我们发现,Fragment和Activity的生命周期有相似之处,如下图:
主要区别在于Fragment的创建过程其实是依赖于Activity容器的,并且销毁的时候也是基于Activity容器进行销毁的,Fragment就是碎片的意思,就是基于Activity显示容器显示的碎片视图。
下面我想通过实验来说明我的观点:
1)首先,我们来证实一点,就是Fragment在什么时候会走生命周期?
有的人说,不是和Activity一样吗?就是在跳转的时候呗,但是Fragment不是跳转的,而是添加或者移除到FrameLayout进行显示或者隐藏的操作,所以在我们new一个Fragment的时候,它是不会走生命周期方法的。
2)我们都知道,目前有两种添加一个Fragment的方法,一个是安卓api的Fragment,一种是support-v4包下的Fragment,那么你知道它们之间有什么异同吗?
答:尽量不要用app包中的fragment,因为这个是在3.0之后才有的,支持的版本太高,在低版本中是是用不了的,android.support.v4.app.Fragment:可以兼容到1.6的版本。得到FragmentManager的方法不一样:android.app.Fragment:使用getFragmentManager()方法。android.support.v4.app.Fragment:使用getSupportFragmentManager()方法。当v4.fragment使用标签的时候就要特别注意了:
当这个Activity的布局中有标签的时候,这个Activity必须继承FragmentActivity,否则就会报错,原因是此时如果不继承FragmentActivity的话,编译系统会把android.support.v4.app.Fragment当成app包中的Fragment来处理,但是此时我们导入的是v4包中的Fragment。
3)Activity和Fragment的生命周期调用上有什么先后顺序呢?
4)注意:常用Fragment的哥们,可能会经常遇到这样Activity状态不一致:State loss这样的错误。主要是因为:commit方法一定要在Activity.onSaveInstance()之前调用。
5)remove和detach有一点细微的区别,在不考虑回退栈的情况下,remove会销毁整个Fragment实例,而detach则只是销毁其视图结构,实例并不会被销毁。那么二者怎么取舍使用呢?如果你的当前Activity一直存在,那么在不希望保留用户操作的时候,你可以优先使用detach。