前言
昨天定位一个线上问题,涉及到Activity和Fragment的生命周期调用先后顺序的问题,今天拿来记录一下这个问题。
正常流程
先看官方给出的生命周期流程图。
Activity生命周期流程图 | Fragment生命周期流程图 | 对比图 |
---|---|---|
![]() |
![]() |
![]() |
这三张图很容易看懂,不多说了,接下来看一下Activity和Fragment的生命周期是如何交错调用的。写一个Activity类,并动态添加一个Fragment,简单贴一下代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Log.d(TAG, "onCreate: before super");
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
setContentView(R.layout.activity_a);
fragment = new FragmentA();
fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container,fragment);
fragmentTransaction.commit();
}
我们一般都是在onCreate中创建fragment并添加到Activity中,执行代码,
1、看APP正常启动时的log:
02-25 18:45:38.821 11624-11624/? D/LifeCycle_ActivityA: onCreate: before super
02-25 18:45:38.835 11624-11624/? D/LifeCycle_ActivityA: onCreate:
02-25 18:45:38.950 11624-11624/? D/LifeCycle_FragmentA: onAttach: FragmentA{
a8fde4d #0 id=0x7f070037}
02-25 18:45:38.950 11624-11624/? D/LifeCycle_FragmentA: onCreate: FragmentA{
a8fde4d #0 id=0x7f070037}
02-25 18:45:38.952 11624-11624/? D/LifeCycle_FragmentA: onCreateView: FragmentA{
a8fde4d #0 id=0x7f070037}
02-25 18:45:38.962 11624-11624/? D/LifeCycle_FragmentA: onActivityCreated: FragmentA{
a8fde4d #0 id=0x7f070037}
02-25 18:45:38.963 11624-11624/? D/LifeCycle_FragmentA: onStart: FragmentA{
a8fde4d #0 id=0x7f070037}
02-25 18:45:38.964 11624-11624/? D/LifeCycle_ActivityA: onStart:
02-25 18:45:38.971 11624-11624/? D/LifeCycle_ActivityA: onResume:
02-25 18:45:38.973 11624-11624/? D/LifeCycle_FragmentA: onResume: FragmentA{
a8fde4d #0 id=0x7f070037}
2、从前台进入后台时的log:
02-25 18:32:22.222 7361-7361/com.test.wxl D/LifeCycle_ActivityA: onPause:
02-25 18:32:22.223 7361-7361/com.test.wxl D/LifeCycle_FragmentA: onPause: FragmentA{
a8fde4d #0 id=0x7f070037}
02-25 18:32:22.251 7361