设为首页 加入收藏

TOP

Android Activity生命周期管理(一)
2014-11-24 11:33:29 来源: 作者: 【 】 浏览:0
Tags:Android Activity 生命 周期 管理

Activity状态


Activity在Android系统中用一个LIFO机制的Activity栈来管理。当新的Activity[A]启动时,它就被放在了Activity栈的顶端,而进入运行状态,而先前运行的Activity[B]通常就被放在了Activity栈里A的下面。当A退出运行而从Activity栈顶出栈之后,B就成了Activty栈的最上面的Activity,可再次进入前台运行状态。


Activity有三种状态:


RESUMED当Activity在屏幕前台运行时(位于当前任务堆栈的顶部),此时该Activity获得了用户的输入焦点。 这个状态也叫Active或Running状态。


PAUSED当它失去焦点但仍然对用户可见时,它处于暂停状态。此时,在它之上有另外一个Activity。这个Activity也许是透明的,或者未能完全遮蔽全屏,所以被暂停的Activity仍对用户可见。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器)。但当系统处于极低内存的情况下,仍然可以杀死这个Activity。


STOPPED 如果它完全被另一个Activity覆盖是,它处于停止状态。它仍然保留所有的状态和成员信息。然而它不在为用户可见,所以它的窗口将被隐藏。如果其它地方需要内存,则系统经常会杀死这个Activity。


处于PAUSED或STOPPED状态的Activity,可以被移除出内存,移除的先后顺序是先STOPPED状态的,后PAUSED状态的。一般PAUSED状态的Activity也只是在资源极端不足的情况下,它所运行的进程才会被杀掉。是否要移除出内存,还要看它所运行的进程具体状况,具体规则和操作,可参阅[5]。



生命周期转换图


下图是根据Android官方提供的Activity状态转换图少许更改之后的图。




(现在可以不理解,但是读完全文,一定要把这张图刻到脑子里!)



在上图中,可以从三个阶段关注Activity的生命周期:


整个的生命周期,指的是onCreate(Bundle)和onDestroy()之间过程。Activity在onCreate()设置所有的“全局”状态,在onDestroy()释放所有的资源。


可见的生命周期,指的是onStart()onStop()之间的过程。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等。onStart()onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。


前台的生命周期,指的是onResume()onPause()之间的过程。在这段时间里,该Activity处于所有 Activity的最上面,获得了用户焦点。Activity可以经常性地在RESUMED和PAUSED状态之间切换,所以在这些接口方法中的代码应该属于非常轻量级的,避免低效的转换而让用户有等待的感觉。


由此,我们可以得出下面几个典型的场景:


1) Activity从被装载到运行。则执行顺序为:onCreate() -> onStart()-> onResume();


这是个典型过程,发生在Activity被系统装载运行时。


2) Activity从运行到暂停,再到继续回到运行。执行顺序为:onPause() -> onResume();


这个过程发生在Activity被别的Activity遮住了部分UI,失去了用户焦点,另外那个Activity退出之后,这个Activity再次重新获得运行。这个过程中该Activity的实例是一直存在。


3) Activity从运行到停止。执行顺序为:onPause() -> onStop() ;


这个过程发生在Activity的UI完全被别的Activity遮住了,当然也失去了用户焦点。这个过程中Activity的实例仍然存在。比如,当Activity正在运行时,按HOME键,该Activity就会被执行这个过程。


4) Activity从停止到运行。执行顺序为:onRestart()-> onStart()-> onResume();


处于STOPPED状态并且实例仍然存在的Activity,再次被系统运行时,执行这个过程。这个过程是3的逆过程,只是要先执行onRestart()而重新获得执行。


5) Activity从运行到销毁。执行顺序为:onPause() -> onStop() -> onDestroy();


这个过程发生在Activity完全停掉并被销毁了,所以该Activity的实例也就不存在了。比如,当Activity正在运行时,按BACK键,该Activity就会被执行这个过程。这个过程可看作是1的逆过程。


6) 被清除出内存的Activity重新运行。执行顺序为:onCreate() -> onStart()-> onResume();


这个过程看起来对用户是透明的,并不会知道这个过程的发生,看起来如同1的执行顺序,不同的是如果保存有系统被清除出内出时的信息,会在调用onCreate()时,系统以参数的形式给出,而1中onCreate()的参数为null。



管理Activity生命周期


这里说是管理Activity的生命周期,更确切的说应该是参与生命周期的管理,因为Android系统框架已经很好的管理了这其中的绝大部分,应用开发者要做的就是在Android的框架下,在Activity状态转换的各个时点上,做出自己的实现,而实现这些要做的只是在你的Activity子类里面Override这些Activity的方法即可。


下图是Activity生命周期相关的方法。




Activity的实例化与启动


Activity实例化是由Android系统完成,在用户点击执行一个Activity或者另一个Activity需要这个Activity执行的时候,如果该Activity的实例不存在,Android系统都会实例化之,并在该Activity所在进程的主线程中调用该Activity的onCreate()方法,实现Activity实例化时的工作。


所以,Activity::onCreate()是系统实例化Activity时,Activity可做的自身初始化的时机。在这里可以实例化变量,调用Activity::setContentView()设置UI显示内容。


一般的,Activity实例化之后,就要启动该Activity,这样会在该Activity所在进程的主线程中顺序调用Activity的onStart()onResume()。回头看图一Activity的生命周期的典型时序,一般onStart()在所有的时序中都不是很特别的过程,所以一般不怎么实现。onResume() 暂停继续流程中很重要,后文再讲。



下图就是Activity实例化与启动的时序




这里从应用开发者角度来说明问题,暂不考虑Android内部的实现细节,所以各种动作的发起者统一用AndroidSystem来说明,而从Activity这边看过去,所有这些操作也都是异步的。



注意


onCreate()在Activity存续期内,只会被调用一次。如生命周期图中的时序6的情

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇搭建Windows下Android应用开发环.. 下一篇解读Android LOG机制的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)