熟悉javaEE的朋友都了解Servlet技术,想要实现一个自己的Servlet,需要继承相应的基类,并重写它的方法,这些方法会在合适的时间被Servlet容器调用。其实Android中的Activity运行机制与Servlet相似,Android系统相当于Servlet容器,Activity相当于一个Servlet;Activity处在这个容器中,一切创建实例、初始化、销毁实例等过程,都是容器来调用,这就是所谓的“Don't call me,I'll call you.”机制。
Activity典型的生命周期可见图4-3所示的流程图。在Activity的生命周期中共有种状态:
(1)Active/Runing。一个新Activity启动入栈后,它显示在屏幕最前端,处理处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,这就是活动状态或运行状态(Active或Running)。
(2)Paused。当Activity失去焦点、被一个新的非全屏的Activity或者被一个透明的ctivity放置在栈顶,此时的状态叫暂停状态(Paused)。此时它依然与窗口管理器保持连接,Activity依然保持活力(如保持所有的状态、成员信息,并且和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止。所以,暂停状态仍然可见,但已经失去焦点,故不可与用户进行交互。
(3)Stopped。如果一个Activity被另外的Activity完全覆盖,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是不再可见,所以,它的窗口被隐藏,当系统内存需要被用在其他地方时,Stopped的Activity将被强行终止。
(4)Killed。如果一个Activity是Paused或Stopped状态,Android系统可以将该ctivity从内存中删除,系统可以采用两种方式进行删除,如要求该Activity结束,又如直接终止它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。
Activity的生命周期有3个关键的循环:(www.xing528.com)
图4-3 Activity的生命周期
(1)整个的生命周期从onCreate(Bundle)开始,到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。例如,某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。
(2)可见的生命周期从onStart()开始,到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等。例如,可以在onStart()中注册一个Intent Receiver来监听数据变化导致UI的变动;当不再需要显示时,可以在onStop()中注销它。onStart()和onStop()可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。
(3)前台的生命周期从onResume()开始,到onPause()结束。在这段时间,该Activity处于所有Activity的最前面,和用户进行交互。Activity可以经常性地在Resumed和Paused状态之间切换。如当设备准备休眠时,当一个Activity处理结果被分发时,当一个新的Intent被分发时,所以,在这些接口方法中的代码应该属于非常轻量级的。
Activity整个生命周期的状态转换和动作都定义在Activity的接口方法中,所有方法都可以被重载。
Activity的生命从onCreate()开始,当能够看到这个Activity时,Activity也迈出人生的第一步onStart(),等它成长到可以进行交互时,也就进入人生最精彩的部分onResume()。当我们把注意力转移到另外的Activity时,Activity进入人生的黯淡期onPause(),这时Activity有两种结果:一种是我们把注意力重新转移到它身上时,它也就获得新生onRestart();另外一种是我们不再关注这个Activity,它从我们的视线中消失,这个Activity的人生也就停止为onStop(),最后,执行onDestroy()来结束Activity匆匆的一生。Activity的人生所经历的过程如下:onCreate,onStart,onResume,onPause,onRestart,onStop,onDestroy。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。