由于对上述的生命周期的记忆混乱,特地从新进行了测试整理:
准备: 2个aicitivy 1个fragment
第一个activity里通过代码加载fragment
测试过程:
1 第一次加载activity1
03-23 01:44:44.937 3256-3256/com.example.test2 I/ceshi: oncreate-activity-1
03-23 01:44:44.937 3256-3256/com.example.test2 I/ceshi: onattach-fragment-1
03-23 01:44:44.937 3256-3256/com.example.test2 I/ceshi: onCreate-fragment-1
03-23 01:44:44.938 3256-3256/com.example.test2 I/ceshi: onCreateView-fragment-1
03-23 01:44:44.938 3256-3256/com.example.test2 I/ceshi: onActivityCreated-fragment-1
03-23 01:44:44.938 3256-3256/com.example.test2 I/ceshi: onStart-fragment-1
03-23 01:44:44.938 3256-3256/com.example.test2 I/ceshi: onStart-activity-1
03-23 01:44:44.938 3256-3256/com.example.test2 I/ceshi: onResume-activity-1
03-23 01:44:44.938 3256-3256/com.example.test2 I/ceshi: onResume-fragment-1
看到如上顺序,先activity1的oncreate,然后是frament的创建, 一口气走了5个fragment的方法.
2 点击回退键(和调用finish方法一样)
03-23 01:56:14.004 2897-2897/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:56:14.004 2897-2897/com.example.test2 I/ceshi: onPause-activity-1
03-23 01:56:14.631 2897-2897/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:56:14.631 2897-2897/com.example.test2 I/ceshi: onStop-activity-1
03-23 01:56:14.631 2897-2897/com.example.test2 I/ceshi: onDestroyView-fragment-1
03-23 01:56:14.633 2897-2897/com.example.test2 I/ceshi: onDestroy-fragment-1
03-23 01:56:14.633 2897-2897/com.example.test2 I/ceshi: onDetach-fragment-1
03-23 01:56:14.633 2897-2897/com.example.test2 I/ceshi: onDestroy-activity-1
销毁的时候显示fragment的生命周期被调用,直到onstop调用完成,然后才是fragment的完全销毁,最后activity销毁
3 手动调用finish
03-23 01:57:18.883 5768-5768/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:57:18.883 5768-5768/com.example.test2 I/ceshi: onPause-activity-1
03-23 01:57:19.705 5768-5768/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:57:19.705 5768-5768/com.example.test2 I/ceshi: onStop-activity-1
03-23 01:57:19.706 5768-5768/com.example.test2 I/ceshi: onDestroyView-fragment-1
03-23 01:57:19.706 5768-5768/com.example.test2 I/ceshi: onDestroy-fragment-1
03-23 01:57:19.706 5768-5768/com.example.test2 I/ceshi: onDetach-fragment-1
03-23 01:57:19.706 5768-5768/com.example.test2 I/ceshi: onDestroy-activity-1
确实和上面一样
4 从当前的fragment跳转到其他的activity中
03-23 01:57:46.946 5768-5768/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:57:46.946 5768-5768/com.example.test2 I/ceshi: onPause-activity-1
03-23 01:57:47.039 5768-5768/com.example.test2 I/ceshi: oncreate-activity-2
03-23 01:57:47.040 5768-5768/com.example.test2 I/ceshi: onStart-activity-2
03-23 01:57:47.040 5768-5768/com.example.test2 I/ceshi: onResume-activity-2
03-23 01:57:47.882 5768-5768/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:57:47.882 5768-5768/com.example.test2 I/ceshi: onStop-activity-1
fragment先onpause,然后是第二个activity的创建,当第二个activity的onresume完成后再关闭第一activty(是关闭不是销毁)
5 关闭第二个activity 返回第一个activity ,点击回退建或者手动调用finish
03-23 01:58:19.040 5768-5768/com.example.test2 I/ceshi: onPause-activity-2
03-23 01:58:19.043 5768-5768/com.example.test2 I/ceshi: onRestart-activity-1
03-23 01:58:19.044 5768-5768/com.example.test2 I/ceshi: onStart-fragment-1
03-23 01:58:19.044 5768-5768/com.example.test2 I/ceshi: onStart-activity-1
03-23 01:58:19.044 5768-5768/com.example.test2 I/ceshi: onResume-activity-1
03-23 01:58:19.044 5768-5768/com.example.test2 I/ceshi: onResume-fragment-1
03-23 01:58:19.635 5768-5768/com.example.test2 I/ceshi: onStop-activity-2
03-23 01:58:19.635 5768-5768/com.example.test2 I/ceshi: onDestroy-activity-2
二 下面是不同fragment的切换,
不使用回退栈的时候
1 add 方法
03-23 01:54:08.544 2897-2897/com.example.test2 I/ceshi: onattach-fragment-2
03-23 01:54:08.544 2897-2897/com.example.test2 I/ceshi: onCreate-fragment-2
03-23 01:54:08.545 2897-2897/com.example.test2 I/ceshi: onCreateView-fragment-2
03-23 01:54:08.545 2897-2897/com.example.test2 I/ceshi: onActivityCreated-fragment-2
03-23 01:54:08.545 2897-2897/com.example.test2 I/ceshi: onStart-fragment-2
03-23 01:54:08.545 2897-2897/com.example.test2 I/ceshi: onResume-fragment-2
2 remove 方法
03-23 01:52:00.927 32471-32471/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:52:00.927 32471-32471/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:52:00.927 32471-32471/com.example.test2 I/ceshi: onDestroyView-fragment-1
03-23 01:52:00.927 32471-32471/com.example.test2 I/ceshi: onDestroy-fragment-1
03-23 01:52:00.927 32471-32471/com.example.test2 I/ceshi: onDetach-fragment-1
3 replace 方法
03-23 01:52:55.264 1460-1460/com.example.test2 I/ceshi: onattach-fragment-2
03-23 01:52:55.265 1460-1460/com.example.test2 I/ceshi: onCreate-fragment-2
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onDestroyView-fragment-1
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onDestroy-fragment-1
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onDetach-fragment-1
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onCreateView-fragment-2
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onActivityCreated-fragment-2
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onStart-fragment-2
03-23 01:52:55.266 1460-1460/com.example.test2 I/ceshi: onResume-fragment-2
使用会退栈的时候 addToBackStack(null)
1 按下回退键
03-23 01:45:30.667 3256-3256/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:45:30.667 3256-3256/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:45:30.667 3256-3256/com.example.test2 I/ceshi: onDestroyView-fragment-1
03-23 01:45:30.667 3256-3256/com.example.test2 I/ceshi: onDestroy-fragment-1
03-23 01:45:30.667 3256-3256/com.example.test2 I/ceshi: onDetach-fragment-1
发现activity没有关闭,只是销毁了fragment
2 remove方法
03-23 01:49:43.820 29208-29208/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:49:43.820 29208-29208/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:49:43.820 29208-29208/com.example.test2 I/ceshi: onDestroyView-fragment-1
发现只是销毁了fragment里的view,fragment本身没销毁
3 2之后再点击回退键,
03-23 01:50:02.855 29208-29208/com.example.test2 I/ceshi: onCreateView-fragment-1
03-23 01:50:02.855 29208-29208/com.example.test2 I/ceshi: onActivityCreated-fragment-1
03-23 01:50:02.855 29208-29208/com.example.test2 I/ceshi: onStart-fragment-1
03-23 01:50:02.855 29208-29208/com.example.test2 I/ceshi: onResume-fragment-1
发现又重新创建了view,这里分析回退键是取消了上一次的操作,再点一次的话发现和1中是一样的。
4 replace
03-23 01:46:34.488 3256-3256/com.example.test2 I/ceshi: onattach-fragment-2
03-23 01:46:34.488 3256-3256/com.example.test2 I/ceshi: onCreate-fragment-2
03-23 01:46:34.488 3256-3256/com.example.test2 I/ceshi: onPause-fragment-1
03-23 01:46:34.488 3256-3256/com.example.test2 I/ceshi: onStop-fragment-1
03-23 01:46:34.488 3256-3256/com.example.test2 I/ceshi: onDestroyView-fragment-1
03-23 01:46:34.488 3256-3256/com.example.test2 I/ceshi: onCreateView-fragment-2
03-23 01:46:34.488 3256-3256/com.example.test2 I/ceshi: onActivityCreated-fragment-2
03-23 01:46:34.489 3256-3256/com.example.test2 I/ceshi: onStart-fragment-2
03-23 01:46:34.489 3256-3256/com.example.test2 I/ceshi: onResume-fragment-2
同样只是销毁了view,fragment本身没销毁.
三 分析总结:
1 fragmeng 的生命周期可以分3中状况:
1.1 到onstop
1.2 到ondestoryview
1.3 到ondetch
2 回退键在有栈操作的时候是不一样的,此时更像是取消上一次的操作,也就是弹栈
可以参考:
http://blog.csdn.net/oracleot/article/details/19036909