activity4种状态和生命周期

时间:2024-03-21 21:23:05

1.activity的4种状态

  • Running:拥有焦点,可以与用户交互。

     一个新的Activity启动入栈后,它在屏幕最前端,处于栈的最顶端。

  • Paused:失去焦点,但是依然可见。

     当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,它仍然可见,但它已经失去了焦点,故不可与用户交互。

  • Stopped:失去焦点,不可见。

     当Activity处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦Activity退出或关闭时,当前的数据和UI状态就丢失了。

  • Killed:Activity被杀掉以后或者被启动以前。

     这时Activity已从Activity堆栈中移除,需要重新启动才可以显示和使用。



2. activity生命周期

2.1 图

activity4种状态和生命周期

2.2 各方法说明

  1. void onCreate(Bundle savedInstanceState)

  2. void onStart()   activity变为在屏幕上对用户可见时调用。

  3. void onResume()   activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
    onStart事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体时,窗体还没有被销毁,也没有执行过onStop事件(窗体还继续存在于Task中),则会跳过窗体的onCreate和onStart事件,直接执行onResume事件。

  4. void onPause()   activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场。窗体被交换到后台时执行。

//有可能在执行完onPause或onStop后,系统资源紧张将Activity杀死,所以有必要在此保存持久数据   

5. void onStop()    activity被停止并转为不可见阶段及后续的生命周期事件时调用。
onPause事件之后执行。如果一段时间内用户还没有重新查看该窗体,则该窗体的onStop事件将会被执行;或者用户直接按了Back键,将该窗体从当前Task中移除,也会执行该窗体的onStop事件。 

6. void onRestart()   重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
onStop事件执行后,如果窗体和其所在的进程没有被系统销毁,此时用户又重新查看该窗体,则会执行窗体的onRestart事件,onRestart事件后会跳过窗体的onCreate事件直接执行onStart事件。 


7. void onDestroy()   activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用onFinish()方法或者系统决定停止该活动以释放资源!

2.3 生命周期中的方法在什么情况下调用

  • 开启一个activty:onCreate() -> onStart() -> onResume()

  • 另外一个B activity覆盖当前A activity: onPause() -> onSaveInstanceState() -> onStop()

  • 上述情况按返回键返回A activity:

    B activity:onPause() -> -> onStop() -> onDestroy()

    A activity:onRestart() -> onStart() -> onResume() 

  • A activity开启B activity,同时finish掉自己:onPause() -> -> onStop() -> onDestroy()

  • 锁屏: onPause() -> onSaveInstanceState() -> onStop()

  • 解锁:onRestart() -> onStart() -> onResume()

  • 按home键:onPause() -> onSaveInstanceState() -> onStop()

  • 从home键回到当前activity:onRestart() -> onStart() -> onResume()

  • 按返回键退出该activity:onPause() -> -> onStop() -> onDestroy()



3. onSaveInstanceState(Bundle outState)的调用

1Activity被系统杀死时被调用

    <1> 屏幕方向改变时,Activity被销毁再重建

    <2> 当前Activity处于后台,系统资源紧张将其杀死

2. 跳转到其他Activity

3. 按Home键回到主屏



4. onRestoreInstanceState(Bundle saveInstanceState)的调用

Activity被系统杀死时被调用

    <1> 屏幕方向改变时,Activity被销毁再重建

    <2> 当前Activity处于后台,系统资源紧张将其杀死


转载于:https://my.oschina.net/u/2421076/blog/669301