在android系统中用activity栈来管理启动的Activity。每次启动一个新的Activity,它会被置于栈顶,而且成为当前活动窗口,原来的Activity还保留在栈中,在当前新启动的窗口下面,并且在新的窗口关闭之前,不会再出现给用户看到。
在android系统中用activity栈来管理启动的Activity。每次启动一个新的Activity,它会被置于栈顶,而且成为当前活动窗口,原来的Activity还保留在栈中,在当前新启动的窗口下面,并且在新的窗口关闭之前,不会再出现给用户看到。
Activity有四个状态:
1)如果Activity是当前窗口,并且在Activity栈顶,状态为running。
2)如果Activity已经失去了焦点,不再是当前窗口,但是依然可以看到(这种状态可以出现在,新建立的窗口是对话框式等不占全屏的窗口时),状态为paused。这个状态下的Activity依然是活跃的(它维护所有状态,记录信息并且和窗口管理服务保持关联),但是在系统存储空间极限时可以被销毁。
3)如果Activity的窗口被新建立的窗口完全遮住,状态为stopped。它依旧维持各种状态,记录信息,但是它不再为用户可见(如果用户使用物理键盘返回键,那么当前窗口从running状态,经过onPause(),onStop(),onDestroy()被销毁,之前被覆盖为stopped状态的Activity经过onRestart(),onStart(),onResume()转为running状态),它的窗口被隐藏,通常在空间紧张的时候被系统销毁。
4)如果Activity处于stopped或者paused状态,系统可以通过调用finish函数或者直接关闭进程的方式释放它,如果需要再使用,必须重新加载并执行到之前的状态。
下面的框图给出了Activity生命周期中几个状态的转换。矩形表示状态转换过程所需要执行的回调方法,这些回调方法是可以重写的。带颜色的曲边矩形表示Activity的主要状态。
在跟踪Activity生命周期时,有三个比较重要的循环:
1)整个生命周期发生在第一个回调方法onCreate(Bundle)和销毁的回调方法onDestroy()之间。Activity在onCreate()方法中执行全局的初始化操作,在onDestroy()中释放所有的资源。例如,在有一个在后台从网络上下载数据的线程在执行,这个进程可能在onCreate()方法中创建,然后在onDestroy()中被终止。
2)用户可以看到的周期位于onStart()方法和onStop()方法之间。在这之间,用户可以在屏幕上看到窗口,即使它不是当前与用户交互的窗口。在这期间,维护着与用户交互所需的各种资源。例如,可以在onStart()方法中注册一个BroadcastReceiver来接收所有能够影响UI的变化所发出的广播,然后当用户什么都看不到的时候,在onStop()方法中注销这个接收器。伴随着窗口的出现和隐藏,这两个方法可以多次调用。
3)Activity在前端执行,在onResume()方法和onPause()方法之间。这期间,Activity是当前与用户进行交互的窗口,这两个方法也是可以多次执行的。
Activity有一组方法来维护整个生命周期,这些方法都可以被重写来完成用户指定的动作。所有的Activity类都会重写onCreate(Bundle)进行初始化;许多情况下也会重写onPause()方法(many will also implement onPause() to commit changes to data and otherwise prepare to stop interacting with the user)。注意,在重写这些方法的最后,一定要调用父类的方法:
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();
}
来源:oschina
链接:https://my.oschina.net/u/779520/blog/83725