Activity生命周期

目录

Activity任务栈

activity的4种形态

正常情况下activity的生命周期

异常情况下activity生命周期

总结


本系列文章仅用于记录一个在Mooc复习Android的过程,不做任何商用。如有转载请注明出处。

Activity任务栈

在Android系统当中,是通过栈的方式来管理activity的, 一个activity实例的状态又决定了它在栈中的位置,比如说,处于前台的activity1它总是处于栈的顶端,如果处于前台的activity1因为异常或者是内存不足而被销毁的时候,处于下方的activity2就会被**,**,它就会上升到栈顶位置,把activity1给顶掉,当又有新的activity被启动的时候,以此类推,通过这种栈的形式来不断的更改activity在栈中位置的变化,而activity在栈中位置的不断变化,又反映了它在不同状态间的切换。

Activity生命周期

activity的4种形态

  • Active:Activity处于栈顶
  1. 可见
  2. 在栈顶
  3. 和用户交互
  • Paused:可见但不可交互,此时activity只是失去了和用户交互的能力,它所有的数据、状态、成员变量等都还是存在的,只有在系统内存不足的时候,才有可能会被系统回收,正常情况下不会被系统回收
  • Stopped:不可见,当一个activity被另外一个activity完全覆盖,它不是被透明的activity覆盖,在内存足够的情况下它所有的数据、状态、成员变量等都还是存在的
  • Killed:系统回收掉

正常情况下activity的生命周期

Activity生命周期

  • onCreate(),在被创建的时候回调,初始化变量或者初始化数据
  • onStart(),这个方法被回调的话就意味着activity已经正在启动状态了,此时activity处于可见状态,但未在前台显示,无法与用户交互
  • onResume(),这个方法被回调的话就意味着已经处在前台可见同时可以和用户交互,此时activity进入了运行状态
  • onPause(),activity正在停止
  • onStop(),在onPause()执行完之后,立即执行,表示这个activity即将停止/被一个新的activity完全覆盖,此时activity不可见,只能在后台运行
  • onDestroy(),表示activity正在被销毁,释放资源、回收资源
  • onReStart(),activity正在重新启动,当activity从onStop()变为onStart(),会回调这个方法

异常情况下activity生命周期

造成生命周期异常的两大因素:

  • 系统配置发生改变
  • 内存不足或者其他原因造成的改变

相比于正常情况下,异常情况下多了两个方法——onSaveInstanceState()和onRestoreInstanceState(),这两个方法是系统自动调用的,但是,它们是在出现异常情况下才会调用的。

onSaveInstanceState()用来保存当前activity的状态信息,我们可以在这个方法中存储一些数据,以便被销毁的activity被重建的时候,可以直接恢复数据。

当activity被重新创建之后,系统会自动调用onRestoreInstanceState(),会把activity销毁时通过onSaveInstanceState()保存的bundle对象,作为参数,传递给onRestoreInstanceState()同时传递给onCreate()。

在平时,为了防止异常情况的出现,我们可以通过onRestoreInstanceState()和onCreate()来判断activity是否被重新创建或者是否被销毁,销毁了的话,我们就可以在这两个方法当中去选一个去进行数据的恢复。但是二者也有一些区别:在onRestoreInstanceState()当中,一旦被系统调用了,它里面传的参数bundle一定不能为空,所以在这里不需要做bundle的非空判断,而在onCreate()种bundle的参数有可能为空,所以在这里需要进行非空判断。所以推荐使用onRestoreInstanceState()。

总结

  • Activity是与用户交互的接口
  • Android系统是通过Activity栈的形式来管理的
  • Active/Pause/Stopped/Killed
  • activity正常启动:onCreate()-onStart()-onResume
  • 点击back回退:onPause()-onStop()-onDestroy
  • 在原来的activity打开一个新的activity:
  1. 新的activity:onCreate()-onStart()-onResume
  2. 原来的activity:onPause()-onStop()
  • activity异常:用onSaveInstanceState()保存数据