Activity

Activity的四种形态

  • Active/Running
    这个时候的Activity位于Task栈顶,可见并能与用户进行交互。
  • Pause
    Activity仍然可见,但是失去了与用户进行交互的能力。
  • Stopped
    Activity完全不可见,被另外一个Activity覆盖的时候,Activity就会进入Stoped状态。
  • Killed
    Activity被系统回收掉或者Activity完全没有创建过。

Activity的生命周期

Activity_第1张图片
activity_lifecycle.png

正如上图,Activity的生命周期。
但其实我们所关心的是三个重要的环。

  • 完整的生命周期(entire lifetime): 从onCreate()方法到onDestroy()是整个Activity的完整生命周期。onCreate()方法主要是对一些View和数据进行初始化。onDestroy()方法主要是销毁这个Activity。
  • 可视生命周期(visible lifetime) 从onStart()调用之后,Activity即可对用户展示,但此时的Activity只是可见而已,还不具备与用户交互的能力。onStop()方法调用之后,Activity即对用户已经不可见。
  • 前台生命周期(foreground lifetime): 在onResume()和onPause()方法之间就是Activity的前台生命周期,调用onResume()之后,Activity处于栈顶,此时的Activity可以与用户进行交互。由于系统经常调用onResume()和onPause()方法,故而在实现这两个方法的时候,不能处理一些耗时的操作。

onSaveInstanceState以及onRestoreInstanceState

  • onSaveInstanceState(Bundle outState)会确保在onStop()方法执行之前调用,所以通常在这个方法里面保存一些数据。保存的数据在Bundle中,会将数据Bundle对象传递给onCreate()以及onRestoreInstanceState()方法。
  • onRestoreInstanceState()会在onStart()方法执行之后调用,恢复onSaveInstanceState()中保存的数据。

Configure Changes

一些配置的改变,例如转屏、语言变化、输入设备的改变等都会引起Activity被销毁,然后进行重建。而要想Activity不被重建,就需要在manifest文件中配置android:configChanges这个属性。

问题

  1. ActivityA启动ActivityB方法的调用情况?
    ActivityA onCreate -> ActivityA onStart -> ActivityA onResume -> ActivityA正在运行,点击按钮启动ActivityB -> ActivityA onPause -> ActivityB onCreate -> ActivityB onStart -> ActivityB onResume -> ActivityA onStop
    当点击按钮的时候,先会触发ActivityA的onPause()方法,此时ActivityA是去焦点,但是仍然可见。接着调用ActivityB的onCreate()、onStart()、onResume(),ActivityB显示在栈顶并且能与用户进行交互,ActivityA变为完全不可见,再调用ActivityA的onStop。

  2. 切换横竖屏Activity的生命周期?

  • 切换横屏
    onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
  • 切换竖屏
    onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

你可能感兴趣的:(Activity)