Android针对Activity的管理使用的是栈,即某一个时刻只有一个Activity处在栈顶,当这个Activity被销毁后,下面的 Activity才有可能浮到栈顶,或者有一个新的Activity被创建出来,旧的Activity就被压栈沉下去。Activity很重要的一点作用 是管理与用户交互,任意时刻与用户处于交互状态的界面只能有一个,所以Android针对Activity的管理采用了栈的数据结构。
官方文档对此主要指出了两点:
-
只有处于栈顶的Activity是处于运行状态的。当启动一个新的Activity时,系统会将它置于栈顶,同时使其运行,这个时候先前处于栈顶的Activity则被压栈,只有当栈顶的Activity退出时才可能重新处于栈顶。
-
一个Activity总的来说拥有四种状态,分别是
-
激活(运行)状态:
此时它一定是在屏幕的最前端的,对应Activity栈来说,它是在栈顶的; -
暂停状态:
此时它在屏幕上仍然是可见的,但是失去了焦点。这种情况会发生在当有一个不会占满整个屏幕或者拥有透明属性的Activity启动并获得了屏幕焦点时。一 个暂停状态的Activity还是存活的(alive),它仍然维持着自己的各个内部状态和成员信息,仍然和window manager保持连接,但是系统可能会在手机内存极低的情况下杀掉该Activity; -
终止状态:
此时这个Activity在屏幕上完全不可见,它已经被其他的Activity挡住了。这时它维护着自己的各个内部状态和成员信息,但是由于用户已完全看 不见它,其window也会被隐藏掉,也就是说window manager不再管理其window信息了。停止状态下的Activity会经常由于手机的内存征用问题被系统杀掉。 -
当Activity被暂停或者终止时,系统可以把它从内存中清除,这个过程也许会提示用户是否要结束该Activity,也许只会简单地杀掉其进程。当这 个Activity重新被用户调出来显示在界面上时,用户自己必须保证Activity能够完全恢复先前维护的内部状态信息,以使其回到Activity 内部所处先前的状态,这种情况如果处理不好很容易出现问题。
-
第二点上依据界面层次考虑其实是3种情况:
-
active/running: 此时Activity管理的界面可见,且直接面对和用户的交互;
-
pause: 此时Activity管理的界面可见,但处于后端,类似变成了背景;
-
stop: 此时Activity管理的界面完全不可见。
生命周期相关函数:
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}