【Android】解析Activity生命周期以及横竖屏切换


1. 生命周期流程 & 方法详解

1.1 具体请看下图

示意图

1.2 注意点

a. 生命周期方法 = 成对出现(配对)

  • onCreate() & onDestory()
  • onStart() & onStop()
  • onResume() & onPause()

b. onStart() & onStop()、onResume() & onPause() 除了回调时刻,在实际使用中无任何区别

  • onStart() & onStop() :从 Activity 是否完全可见的角度 进行回调
  • onResume() & onPause(): 从 Activity 是否位于前台(UI最顶层)的角度进行回调;
  • 除了上述的区别,在实际使用中没有任何区别

c. 当前Activity为A,此时用户打开ActivityB后,那么A的onPause()和B的onResume()哪个方法先执行?

答:先 A的onPause() ,再B的onResume()

  • Activity的启动过程:由ActivityManagerService(AMS)对栈内的Activity状态进行同步管理 & 规定:Activity启动前,栈顶的Activity必须先onPause(),才能启动新的Activity(执行onResume()

注:为了让新的Activity尽快切换到前台,在 onPause()尽量不要做耗时 / 重量级操作


2. 常见场景的生命周期调用方式

示意图


3. 与Fragment生命周期对比

  • FragmentActivity的生命周期非常相似
  • 具体对比如下图:
    与Fragment生命周期对比

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

PS:

当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变

Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState --> onPause --> onStop       onRestart -->onStart--->onResume

Activity未被完全覆盖只是失去焦点:onPause--->onResume


猜你喜欢

转载自blog.csdn.net/xfb1989/article/details/110189444