您的位置:首页 > 其它

Activity和Fragment的生命周期的混合调用

2017-03-23 13:41 197 查看
由于对上述的生命周期的记忆混乱,特地从新进行了测试整理:

准备: 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 回退键在有栈操作的时候是不一样的,此时更像是取消上一次的操作,也就是弹栈

可以参考:

Android的任务和回退栈 
http://blog.csdn.net/oracleot/article/details/19036909
8a61
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: