Advertisement

Fragment和Activity生命周期的关系

阅读量:

如果我们在Fragment及其宿主Activity生命周期内的所有阶段中加入Log记录,并希望清晰地列出它们的执行顺序,请问是否可行?让我们先参考Google官方提供的示意图。

这里写图片描述

乍一看似乎有点复杂:Activity有七个生命周期方法而Fragment则有十一个方法。不过只要明白了其中关键点就容易理解了。
明白了其中关键点就容易理解了。
在启动时Activity会先调用此方法:Activity–onCreate()。
当Fragment被附加到Activity上时:Fragment–onAttach()会被调用。
随后Fragment自身也会调用此方法:Fragment–onCreate()。
当Fragment创建视图时:Fragment–onCreateView()会被执行。
最后是:Fragment–on-processing()。

接下来是这样的情形:6.Activity–onStart(); 7.Fragment–onStart(); 8Activity–onResume(); 9Fragment–onResume(); 我们清楚地认识到不论针对Activity还是Fragment而言, onPause()这个生命周期都是他们运行时耗时最长的部分. 当应用打开后它们就会处于该生命周期之中. 当应用销毁时, 春江水暖鸭先知的是Fragment会最先察觉到这一情况, 因此销毁操作中Fragment将会引领Activity: 10.Fragment–onPause(); 11Activity–onPause(); 12.Fragment–onStop(); 13Activity–onStop(); 14.Fragment–onDestroyView(); 15.Fragment–onDestroy(); 16.Fragment–onDetach(); 17Activity–onDestroy(); 这一顺序成立的一个前提是所有的日志打印操作都必须紧跟在super()方法之后编写. 如果我们在布局文件中定义了Fragment并将其放在某个布局活动中同时又在Activity的onCreate()方法中通过setContentView()调用了该布局, 那么我们所看到的生命周期执行顺序可能会产生细微差别. 这种差异只是技术细节层面的问题, 大家自行研究即可理解其中的道理. 总之, 在应用创建过程中, Fragment始终由Activity引领; 而在销毁过程中, 则是Activity由Fragment来引领.

全部评论 (0)

还没有任何评论哟~