您的位置:首页 > 其它

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的状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: