Android Activity生命周期分析

先放一份 Activity 生命周期的流程图

  • onCreate

      表示该 Activity 正在被创建,属于生命周期的第一个方法,我们一般在这个方法里面做一些数据的初始化,比如加载布局资源,初始化一些需要使用的数据。

  • onRestart
      表示该 Activity 正在重新启动,一般情况下,当当前 Activity 由不可见到重新可见状态,就会调用 onRestart 。比如当用户切换到下一个 Activity 或者使用 Home 键到桌面,Activity 的 onPause 和 onStop 被执行了,这时候再返回该 Activity,onRestart 就会被调用。
  • onStart

      表示该 Activity 正在被启动,当 Activity 由不可见转为可见状态,但是还没有出现在前台,无法进行交互,可以理解为 Activity 已经显示出来了,但是我们还看不到。一般当用户新建一个  Activity 或者返回这个 Activity 时都会被调用。

  • onResume

      表示该 Activity 已经可见且可以进行交互。需要注意的是,虽然 onStart 和 onResume 都可以表示该 Activity 可见,但是 onStart 时该 Activity 还在后台,onResume 却在前台。

  • onPause

      表示该 Activity 正在停止,这是可以做一些数据储存,停止动画等操作,但不能太耗时,因为 onPause 执行完,新的 Activity 的 onResume 才会执行,如果太耗时,会影响下一个 Activity 的显示。

  • onStop

      表示该 Activity 即将停止,可以做一些稍微重量级的回收,但是也不可以太耗时。

  • onDestroy

      表示该 Activity 即将被销毁,这是生命周期最后一个回调,我们可以做一些回收工作和最终的资源释放。


上面的生命周期流程只是一些正常情况下的流程,下面是一些异常情况下的生命周期:


  • 资源相关的系统配置发生改变导致Activity被杀死并重新创建

      比如说横屏和竖屏发生变化时,导致系统资源配置发生改变,这时默认情况下,Activity 就会被重新创建。当系统配置发生变化,Activity 会被销毁,onPause、onStop、onDestroy 会被调用,同时因为 Activity 是在异常情况下停止的,系统会调用 onSaveInstanceState 来保存当前 Activity 的状态,这个方法会在 onStop 之前调用,但是与 onPause 没有既定的时序关系,这个方法只会出现在 Activity 被异常终止的情况。当 Activity 被重新创建时, 系统会调用 onRestoreInstanceState ,并且把 onSaveInstanceState 保存的 Bundle 值作为参数传给 onRestoreInstanceState ,onRestoreInstanceState 在 onStart 之前。

  • 资源内存不足导致低优先级的 Activity 被杀死

      Activity 优先级分三种,由高到低为:前台 Activity(正在和用户交互的 Activity)、可见但非前台的 Activity(比如弹出一个对话框,导致可见但是位于后台无法交互)、后台 Activity(已经被暂停的 Activity,比如执行了 onStop)。

      当内存资源不足时,系统会按照优先级去杀死一些优先级较低的 Activity,并在 onSaveInstanceState ,onRestoreInstanceState 中来存储和恢复数据。所以说,一些没有四大组件执行的进程,优先级很低,很容易被杀死。


上面两种都是重新创建 Activity 时保存和恢复数据的方法,我们也可以阻止 Activity 重新创建:

在 Manifests 文件中为该 Activity 设置 android:configChanges="" 属性添加一个 orientation。

学习自《Android开发艺术探索》


猜你喜欢

转载自blog.csdn.net/young_time/article/details/80240199