Fragment和Activity类似,也有自己的生命周期,并且fragment的生命周期和activity的生命周期特别相似。
Activity的生命周期由四种状态,运行、暂停、停止、和销毁,类似的,Fragment也有这四种状态,只是在一些细小的地方有所不同。
Fragment生命周期图(来自Android官网)
下面直接通过工程来认识Fragment的生命周期
首先新建FragmentDemo工程。
MainActivity.java
[代码]java代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
代码很简单,加载相应的布局,通过监听button的点击事件,加载fragment。
activity_main.xml
[代码]xml代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 |
|
MyFragment.java
[代码]java代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|
MyFragment中复写了一些方法,每个方法被调用时打印日志。
ok,大功告成,现在就跑到手机上。
观察打印日志,可以看到:
[代码]java代码:
1 |
|
按下按钮时
[代码]java代码:
1 2 3 4 5 6 |
|
此时按下home键
[代码]java代码:
1 2 |
|
重新回到应用
[代码]java代码:
1 2 |
|
按下back键,此时fragment和activity均被销毁。
[代码]java代码:
1 2 3 4 5 |
|
观察日志,不难发现。
当fragment被创建时,会依次经历以下状态:
· onAttach()
· onCreate()
· onCreateView()
· onActivityCreated()
当fragment处于可见状态时,会经历
· onStart()
· onResume()
不可见时,经历了
· onPause()
· onStop()
当fragment被销毁时(或相应的activity被销毁时)
· onPause()
· onStop()
· onDestroyView()
· onDestroy()
· onDetach()
由此可见,fragment的生命周期和activity的生命周期真的非常的相似,只是增加了一些新的状态。
在fragment中也是可以通过onSaveInstanceState()方法保存数据的,因为进入停止状态的fragment可能由于系统内存不足而被回收,保存下来数据可以在onCreate(),onCreateView(),onActivityCreate()三个方法中重新得到,他们都含有一个Bundle类型的saveInstanceState参数。