参考: 《第一行代码:Android》 郭霖(著)ip
Activity所在的栈为后进先出(Last In First Out)结构。内存
Activity状态get
运行状态(S1):it
该Activity处于与User交互的状态,便是位于栈顶的Activity。io
系统通常不考虑回收该处内存。ast
暂停状态(S2):变量
Activity再也不处于栈顶(Another activity comes in front of the activity),但仍然是可见的。im
系统只有在内存极低时才考虑回收内存。数据
中止状态(S3):activity
Activity不处于栈顶&彻底不可见(The activity is no longer visible)。
系统会保存该Activity相应的状态和变量,但内存被回收的概率增大,即不能保证该Activity没有被回收。(Process is killed)
销毁状态(S4):
Activity从栈中被移除(调用finish()或点击Back键)。
重点回收该状态下的Activity占用的内存。
Activity生存期
onCreate()
Activity被建立时调用,完成各类初始化操做。
onStart()
Activity由不可见(invisible)变为可见(invisible)时调用。
onResume()
Activity准备好与User交互时调用,此时activity必定位于栈顶(S1).
onPause()
调用了其余Activity(再也不位于栈顶),关键数据会被保存,但仍处于可见状态(visible, S2).
onStop()
Activity变为不可见(invisible)时调用(S3)。
onDestroy()
Activity被销毁前调用(S4)。
onRestart()
Activity由中止状态变为运行状态前调用(S3→S1,即不可见→可见)。
因为onStop()时Activity的内存可能已经被回收,因此在调用onStart()变为可见前要调用onRestart()做准备。
补充
除了onRestart()外,其他生存期为一一对应关系
onCreate() vs onDestroy()
onStart() vs onStop()
onResume vs onPause()