【www.gdgbn.com--.Net开发】

在android,系统把activities当做一个activity stack进行管理。当一个新的activity被启动时,它将放在这个activity stack的最顶部,然后成为一个running activity. 而上一个activity总是在这个activity的下一层,且将不会再显示到前端直到一个新的activity存在! 

     一个activity本质上来说包括以下四个状态:    1. 当一个activity在屏幕的前台(foreground)时(同时也在activity stack的顶部)时,这个activity就处在active或running状态。    2. 当一个activity失去了焦点,但是可见(例如:一个新的不是全屏的activity处于activity stack顶部)时,activity处理paused状态. 一个被paused的activity是完全可用的(alive)(这时的activity将保存所有的状态与成员信息且仍处理window manager 的attach范围), 这种状态下的activity在系统极度缺少内存的情况下被系统杀掉!     3. 如果一个activity完全被另一个activity覆盖时,该activity就处理stoped状态。它将仍然保存所有状态与成员信息,但是,它对用户已经不在可见,所以,它的窗口被隐藏了。当系统需要内存时,系统会经常杀掉这种状态的activity。     4.当一个activity处理paused或stopped状态时,系统可以清除这个activity的内存而不调用这个activity的finish方法或者简单的结束它的进程,当它被再次显示给用户,它需要再次完全启动,并还原到最近的一状态。   下面所说的方法可以理解为activity进入对应状态时会被调用的方法!   下面的一张图说明了activity的状态变化路线图。长方形表示你可以覆盖这些方法,以便在activity状态切换之间执行一定的动作。含有颜色的椭圆表示activity可能经常处于的状态!       activity_lifecycle 下面是三个在你控制或监控(monitoring)activity过程中比较重要的三个循环: 1. 全个生命期(the entire lifetime). 这个生命周期发生在第一调用oncreate(bundle)方法到最终的对ondestroy()的调用。一个acitivity可以在oncreate()方法中对全局的状态进行初始化,在ondestroy中释放所有用到的资源。例如:如果需要一个后台运行的从网络中下载数据的线程,那么可以在oncreate()函数中进行创建,在ondestroy()中停止。 2. 可视生命期(visible lifetime). 这个生命期从调用onstart()方法开始到调用onstop()函数结束。在该生命期中,用户可以在屏幕上看到这个activity,尽管他可能不在前台,不能与用户进行交互,在这个生命期中,你可以维护那些你要显示给用户看的数据。例如:为了监控所有可以对你的ui产生影响的消息,你可以在onstart()函数中注册一个broadcastreceiver,然后当用户不能看到你所要显示的信息,在onstop()函数中反注册它。onstart()与onstop()方法可以被调用多次。 3. 前台生命期(foreground lifetime).前台生命期从onresume()到onpause()。在这期间,这个activity在其他activity的前面,且正在与用户进行交互。一个activity可以很频繁的在resumed与paused状态之间进行切换。例如当设备sleep时、一个activity result被传递时、一个新的intent被传递时等。所以,运行在这期间的代码必须时快速轻量级的。  

一个activity的整个生命周期定义在下面的activity方法中。你可以覆盖这些方法,使得activity在不同状态之间执行一定的动作。所有的activities都将实现oncreate(bundle)方法去完成初始化设置工作,在实现这些方法的过程中,你需要经常调用这些方法的superclass

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();
 }

本文来源:http://www.gdgbn.com/asp/29315/