在客户端源码中,咱们能够看到大量的Fragment,关于Fragment的相关学习,给你们推荐一篇值得学习的博客:服务器
http://blog.csdn.net/lmj623565791/article/details/37970961 学习
本文 主要介绍 Fragment 和Acitivity生命周期的关系,掌握生命周期后,咱们能够灵活的在各个周期进行相应的业务处理。demo中一个Activity activity 两个 Fragment first second ,经过add 方法添加Fragment,切换时经过hidden 和show方法隐藏和显示。默认首先加载first 。咱们复写了Acticity 和 Fragment中的 生命周期,在里面进行简单的打印操做。因为demo简单,再也不粘贴上来。测试
测试汇总状况以下:spa
一、activity 显示时,只建立了 first的实例,并无经过事务将first添加到activity中去的话,咱们会发现并不会触发first的生命周期;由于你没有将Fragment添加到界面中的话,意味着并无将界面和Fragment创建关联。.net
二、activity 显示,建立 first的实例,经过事务将first添加add到activity中去的话,当前能够看到first。生命周期:blog
activity :onCreate ,first :onAttach onCreate onViewCreate ;生命周期
activity :onStart ,first :onStart ;事务
activity :onResume,first :onResume;ci
三、从first 切换到 secon,second首次加载,声明周期变化:get
first :onHiddenChanged 结果true first隐藏了。 second: onAttach onCreate onViewCreate onStart onResume;
四、如今在second 按下hom键的周期变化:
由于first的加载先于second ,咱们很轻易地发现
first second activity 依次onPause ; first second acticity 一次onStop;
五、在4的基础上,从新唤醒应用的周期变化,界面中有onRestart,而Fragment没有的。所以:
activity onRestart ;
activity first second 依次onStart ,activity first second 一次onResume;
六、当前就在first 再一次的显示first
first onHiddenChanged 中其返回值 先true 再false. 意思先把你隐藏 而后再把你显示(不隐藏)
七、按返回键,关闭界面
first second activity 依次 onPause ;
first second activitu 依次 onStop;
first onDestoyView onDestory onDetach ;
second onDestoyView onDestory onDetach ;
activity onDestory.
总结:
一、Fragment 是界面的一部分,界面能够有一个或者多个Fragment组成;
二、因为Fragment是依附在界面中的,所以,Fragment的生命周期的开始onAttach 晚于 界面的生命周期的开始onCreate;
三、因为Fragment是依附在界面中的,所以,Fragment的生命周期的结束起始onPause 早于 界面的生命周期的结束起始onPause;
四、界面中若是有 多个Fragment ,最早加载的Fragment的生命周期不管开始仍是结束都先于后来加载的Fragment.
五、Fragment 第一次加载onHiddenChanged不会回调,切换其余Fragment再切回来到当前的Fragment的时候, 能够根据是否被隐藏的结果 ,来作一些业务处理,好比说“每次看见fragment的时候都向服务器请求数据“。
但愿简单的总结,能帮助到你我。赞顶一下嘛,谢谢!!