我问你答-简述 Activity 的生命周期

简述

Activity 的生命周期是围绕着 7 个生命周期方法展开的。

onCreate(Bundle savedInstanceState)
在 Activity 被创建时调用,并且只会调用一次。这个方法可用于做一些初始化操作,Activity 布局加载,控件绑定或者 P 层的初始化及关联。
其入参是 Activity 对之前状态的保存,简单说就是页面异常销毁时,会保存一些状态,并在调用该方法时传入,用于状态的恢复。

onStart()
该方法紧随 onCreate() 之后,是 Activity 由不可见到可见的一个转折点,此时的 Activity 应该是可见但还没有焦点不可操作的一个状态。该方法视实际情况会调用 1~n 次。

onResume()
该方法表示 Activity 处在前台可见且可操作的状态,用户可与 Activity 进行交互操作。该方法视实际情况会调用 1~n 次。

onPause()
注意,该方法和 onStart() 方法具有对称性,是 Activity 由可见可操作到可见不可操作的一个转折点,接下去一步 Activity 有可能变为不可见或销毁。该方法和 onStart() 一样,只是一个过渡状态,并不会持久,所以不要做一些耗时的东西。该方法视实际情况会调用 1~n 次。

onStop()
注意,该方法和 onResume() 方法具有对称性,此时的 Activity 不可编辑也前台不可见了。该方法视实际情况会调用 1~n 次。

onDestory()
注意,该方法和 onCreate() 方法具有对称性,在 Activity 被销毁时会被调用,且只会调用一次,之后,这个 Activity 的实例将被销毁。

onRestart()
该方法在 Activity 由不可见状态恢复到前台可见时会触发,但在 Activity 首次创建时不会触发。该方法视实际情况会调用 1~n 次。

不同场景下的生命周期流转

  1. 由 Activity A 打开 Activity B


    Activity A 打开 Activity B.jpeg
  2. 由 Activity A 打开 半透明的 Activity C(或者打开 Dialog 样式的 Activity)


    Activity A 打开 Activity C.jpeg
  3. 由 Activity A 打开 Dialog 或者 PopupWindow D
    不同于情况 2 ,Activity A 将不会改变生命周期。
  4. Activity A 前台可见的情况下,横竖屏切换
    横竖屏的切换将会导致生命周期的重建,即 onPause() -> onStop() -> onDestory() -> onCreate() -> onStart() -> onResume()

总的来说,不管场景如何,Activity 的生命周期是具有对称性的,同时在 Activity 由前台可见状态发生变化时,一定是先触发当前的 onPause(),接着在其他组件完成状态之后,当前 Activity 的生命周期才会再次变化。

补充:如果 Activity 需要关心返回结果可通过 onActivityResult() 方法获取,且调用时机是在 onRestart() 之前。

参考文章:
重识Activity—Activity的生命周期

你可能感兴趣的:(我问你答-简述 Activity 的生命周期)