在对用户体验越来越重视的今天,作为一个安卓程序员,对Fragment都不会陌生。
但经常使用,未必意味着就了解的清晰。
就像我学习JAVA的时候,学的都是“程序应该怎么写”,而一旦出现了“不这么写会怎样”的情况,就蒙圈了。
这是我报考OCJP后的感受,忽然间发现,原来JAVA是这样的。
言归正传。
这个主题是看了其他人的一个提问引起的:
他在new出Fragment实例后,用这个对象调用了Fragment内部的一个方法(该方法操作了Fragment内部的一个对象),然后提交了将Fragment放入容器的事务。
结果得到的是那个Fragment内部对象为空。
我们经常使用Fragment,网上也能找到很多关于Fragment生命周期的方法,但不知大家有没有思考过Fragment在整个程序中的周期是个什么样子。
我写了个验证程序,获得了如下的Log信息:
New Fragment
Transaction Add Fragment
Transaction commit
onAttach
onCreate
onCreateView
onViewCreated //此方法只有在onCreateView()中返回了某View才会被执行。
onActivityCreated
onStrat
onResume
……
如上,当Fragment被new出来的时候,只是进行了实例化,或者说调用了Fragment的构造方法,并未进入生命周期。
当事务被创建的时候也不会对Fragment本身造成影响。
只有在事务被提交以后才会进入Fragment的生命周期中。
而onViewCreated方法必须是在onCreateView中返回某个view的实例才会被调用。
其他就是常见的生命周期方法了。