Android—活动的生命周期

Android中的活动是可以层层叠加的,每启动一个新的活动,就会覆盖在原活动之上,点击back键就会销毁最上面的活动,下面一个活动就会显示出来。

android主要用任务(task)来管理活动,一个task就表示 一组存在栈(叫做返回栈:Back Stack)内的活动

启动一个活动,它便会入栈,位于栈顶,销毁一个活动时,栈顶活动出栈,如下图


活动有4种状态

1、运行状态

    活动位于栈顶,处于屏幕最前方,系统也不会回收

2、暂停状态

    活动不再处于栈顶,但依然用于可见(如栈顶的活动是透明的或者栈顶活动并不是铺满整个手机屏幕),此时处于暂停状态, 一般系统不会回收

3、停止状态

    活动不位于栈顶,而且完全不可见,被其他活动完全遮挡,    其他地方需要内存时系统有可能回收

4、销毁状态

    被销毁(不位于栈顶),就会被系统回收


在每个不同的状态阶段,Adnroid系统对Activity内相应的方法进行了回调。因此,我们在程序中写Activity时,一般都是继承Activity类并重写相应的回调方法。

有以下七种方法

1.onCreate()

每个活动都会有的方法,在活动第一次被创建的时候调用

2.OnStart()

这个活动在活动由不可见变为可见的时候调用

3.OnResume()

这个方法在活动准备好和用户进行交互的时候调用,此时的活动一定位于返回栈的栈顶,并且处于运行状态。

4. onPause()

这个方法在系统准备去启动或者恢复另一个活动的时候调用。 我们通常会在这个方法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

5.onStop()

这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()方法并不会执行。

6.onDestroy()

这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。

7.onRestart()

这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

以上七个方法中除了 onRestart()方法,其他都是两两相对的,从而又可以将活动分为三种生存期。

1.    完整生存期

活动在 onCreate()方法和 onDestroy()方法之间所经历的,就是完整生存期。一般情况下,一个活动会在 onCreate()方法中完成各种初始化操作,而在 onDestroy()方法中完 成释放内的操作。

2.    可见生存期

活动在 onStart()方法和 onStop()方法之间所经历的,就是可见生存期。在可见生存期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在 onStart()方法中对资源进行加载, 而在 onStop()方法中对资源进行释放,从而保证处于停止状态的活动不会占用过多内存。

3.    前台生存期

活动在 onResume()方法和 onPause()方法之间所经历的,就是前台生存期。在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行相互的,我们平时看到和接触最多的也这个状态下的活动。


三个阶段:

1.开始Activity:在这个阶段依次执行3个生命周期的方法,分别是:onCreate、onStart和onResume方法

2.Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个方法,onRestart、onStart和onResume

3.关闭Activity:当Activity被关闭时系统会依次执行3个方法,onPause、onStop和onDestory。



从以上的Activity的生命周期不难看出,该图包含了两层循环,

第一层循环是:onPause->onResume->onPause

第二层循环是:onStart->onRestart->onResume->onPause->onStop

第一层循环称为是 焦点生命周期,第二层循环可以视为生命周期。

也就是说,第一层循环是在Activity焦点获得与失去的过程中循环,在这个过程中,Activity始终是可见的

第二层循环是Activity可见和不可见的过程中循环。


一个最简单的完整的Activity生命周期会按照如下顺序回调:onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。


在实际应用场景中,假设A Activity位于栈顶,此时用户操作,从A Activity跳转到B Activity

开始时,A被实例化,执行的回调有A:onCreate -> A:onStart -> A:onResume。

当用户点击A中按钮来到B时,假设B全部遮挡住了A,将依次执行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。

此时如果点击Back键,将依次执行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。

猜你喜欢

转载自blog.csdn.net/xiaofeng3011/article/details/80625349
今日推荐