Fragment的生命周期以及相关库函数的执行流程总结
2015-08-21 18:18
507 查看
不废话,先上两张经典图:
Fragment的生命周 :
与Activity生命周期的对比:
Fragment第一次显示流程:(add)onAttach ——》onCreate ——》onCreateView——》onActivityCreated——》onStart——》onResume。
关屏幕或者回到桌面:onPause()->onSaveInstanceState-》onStop()。
重开屏幕或者回到应用:onStart-》onResume。
退出应用:onPause-->onStop-->onDestroyView--> onDestroy-->onDetach。
切换到另一个Fragment::onPause-->onStop-->onDestroyView。
回到之前的Fragment::onCreateView——》onActivityCreated——》onStart——》onResume。
add()函数触发的流程:(add)onAttach ——》onCreate ——》onCreateView——》onActivityCreated——》onStart——》onResume。
detach()函数触发的流程:detach()->onPause()->onStop()->onDestroyView()。
attach()函数触发的流程:attach()->onCreateView()->onActivityCreated()->onStart()->onResume()。
replace()函数触发的流程(先销毁老的再创建新的):onPause()->onStop()->onDestroyView()--> onDestroy-->onDetach-》onAttach ——》onCreate ——》onCreateView——》onActivityCreated——》onStart——》onResume。
remove()函数触发的流程:onPause()->onStop()->onDestroyView()--> onDestroy-->onDetach-。
使用hide()方法只是隐藏了fragment的view并没有将view从viewtree中删除,随后可用show()方法将view设置为显示。
调用show() & hide()方法时,Fragment的生命周期方法并不会被执行,仅仅是Fragment的View被显示或者隐藏。而且,尽管Fragment的View被隐藏,但它在父布局中并未被detach,仍然是作为containerView的childView存在着。
isAdded():执行了add()函数,并且事务被提交后,返回true。
isDetached():执行了detach()函数,并且事务被提交后,返回true。
要注意,如果事务没有被提交,即使调用了add或者detach,isAdded()或者isDetached()返回的也是flase,只有在下一次事务开始之后能看到本次事务开始之前fragment的状态。
Fragment的生命周 :
与Activity生命周期的对比:
Fragment第一次显示流程:(add)onAttach ——》onCreate ——》onCreateView——》onActivityCreated——》onStart——》onResume。
关屏幕或者回到桌面:onPause()->onSaveInstanceState-》onStop()。
重开屏幕或者回到应用:onStart-》onResume。
退出应用:onPause-->onStop-->onDestroyView--> onDestroy-->onDetach。
切换到另一个Fragment::onPause-->onStop-->onDestroyView。
回到之前的Fragment::onCreateView——》onActivityCreated——》onStart——》onResume。
add()函数触发的流程:(add)onAttach ——》onCreate ——》onCreateView——》onActivityCreated——》onStart——》onResume。
detach()函数触发的流程:detach()->onPause()->onStop()->onDestroyView()。
attach()函数触发的流程:attach()->onCreateView()->onActivityCreated()->onStart()->onResume()。
replace()函数触发的流程(先销毁老的再创建新的):onPause()->onStop()->onDestroyView()--> onDestroy-->onDetach-》onAttach ——》onCreate ——》onCreateView——》onActivityCreated——》onStart——》onResume。
remove()函数触发的流程:onPause()->onStop()->onDestroyView()--> onDestroy-->onDetach-。
使用hide()方法只是隐藏了fragment的view并没有将view从viewtree中删除,随后可用show()方法将view设置为显示。
调用show() & hide()方法时,Fragment的生命周期方法并不会被执行,仅仅是Fragment的View被显示或者隐藏。而且,尽管Fragment的View被隐藏,但它在父布局中并未被detach,仍然是作为containerView的childView存在着。
isAdded():执行了add()函数,并且事务被提交后,返回true。
isDetached():执行了detach()函数,并且事务被提交后,返回true。
要注意,如果事务没有被提交,即使调用了add或者detach,isAdded()或者isDetached()返回的也是flase,只有在下一次事务开始之后能看到本次事务开始之前fragment的状态。
相关文章推荐
- Valid Parentheses
- android 组件Spinner组件实例
- hkaAnimation->hkaAnimationBinding
- 机器学习之白话与实战adaboost元算法
- POJ 1459
- ZOJ 3790 Consecutive Blocks(尺取法)
- 经常访问的技术网站
- editor does not contain a main type 解决方法
- Delphi文件映射
- HBase初探
- cstring和相关类型的相互转换int,double,char*
- 第1章 unix基础知识
- 交易应用及网站驱动不兼容Windows 10的解决方案
- Delphi中ADO异步执行方式
- 读Java Concurrency in Practice. 第六章.
- 关于数据库索引
- 如何在“一周内”摸清一个行业
- Struts2学习笔记——02
- Spark修炼之道(基础篇)——Linux大数据开发基础:第一节、Linux介绍、安装及使用初步
- 创建com服务器