前言
因为很久没有碰android了导致上次面试时一些非常基础的问题都已经记不清了,尴尬,对于activity的生命周期的理解在android开发中至关重要,这里做个整理,也当是复习。
Activity的四种活动状态
android中使用“返回栈”管理activity。栈都很熟悉了,一种单向开口、先进后出的数据结构。我们能看到的activity都位于栈顶,每当我们按下back键或者调用finish()时,将移除栈顶activity。
activity只会存在以下4种活动状态:
运行状态
此时activity位于栈顶,系统最不会回收的activity。
暂停状态
此时activity不再位于栈顶,但依然可见。比如弹出一个对话框且只占用屏幕的中间部分,后面的activity依然可见,这时后方的activity就处于暂停状态。系统也极不愿回收此类activity,除非内存极低。
停止状态
此时activity不再位于栈顶也不再可见。系统会保存其状态和变量,但当别处需要内存资源时,将会回收此类activity。
销毁状态
此时activty已经被移除了返回栈。系统回收此类activity。

Activity中定义的7种回调方法
- onCreate(),最常用的一个方法,在每个activity中都会重写此方法。负责在activity第一次生成时初始化,如加载布局、绑定事件等。
- onStart(),在activity从不可见到可见时调用。
- onResume(),activity位于栈顶处于运行状态,已经准备好与用户交互。
- onPause(),启动或回复另一个activity时调用,通常释放一些耗cup的资源放掉,保存关键数据。注意要执行速度一定要快,否则会影响新栈顶activity的使用。
- onStop(),activity由可见变为不可见。
- onDestory(),按下back键或调用finish()方法时,会调用此方法去告诉系统本activity已经完成任务可以去回收了。
- onRestart(),activity已经创建过了,现处于停止状态要恢复为运行状态。
Activity生命周期中的3个循环。
- 完整生存期,对应的是onCreate和onDestory两个方法,完成activity的初始化和activity的资源释放。
- 可见生存期,对应的是onStart和onStop两个方法,完成activity的可见(即使是无法与用户交互)和不可见时停止activity,交换出栈顶。
- 前台生存期,对应的是onResume和onPause两方法,完成与用户交互的切换工作。
- 另外,还有一个onRestart是当activity还没有被系统回收时从停止状态恢复为运行状态。
一张官方的示意图:
