发表于: 2018-12-20 22:13:22

0 781


一、今天完成的事情

重新看了活动的生命周期

返回栈

Android是用任务Task来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈被称为返回栈(Back Stack)。栈是一种先进先出的数据结构,默认情况下,每当启动一个新的活动,这个活动就会在返回栈入栈,并处于栈顶的位置,每当按下Back键或者调用finish()销毁活动,处于栈顶的活动就会出栈,这时前一个入栈的活动就会重新处于栈顶的位置,而系统总是会将处于栈顶的活动显示给用户。

活动在其生命周期中最多会有四种状态

1.运行状态

当一个活动处于顶栈时就处于运行状态,系统不会随意回收处于栈顶的活动。

2.暂停状态

当一个活动不再处于栈顶状态,但仍然可见时,这时活动就进入了暂停状态。系统也不会随意回收暂停状态的活动,因为它仍是可见的,只有在内存非常紧张的时候系统才会考虑回收这种活动。

3.停止状态

当一个活动不再处于栈顶位置并且完全不可见时,就进入了停止状态。系统会为处于停止状态的活动保存状态和成员变量,担当别的地方需要内存时,停止状态的活动随时可能会被回收。

4.销毁状态

当一个活动从返回栈中被移除后就会处于销毁状态,系统会优先回收处于销毁状态的活动。


活动的生命周期

Activity类中有7个回调方法覆盖了活动的生命周期的每一个环节

1. onCreate()

在活动第一次被创建时调用,活动的初始化操作比如加载布局、绑定事件都应该在此方法中完成。

2. onStart()

这个方法会在活动由不可见变为可见时调用。

3. onResume()

这个方法在活动准备号和用户交互时调用,此时活动一定处于返回栈的栈顶,处于运行状态

4. onPause()

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

5. onStop()

活动完全不可见时会调用此方法。这个方法和onPause()的主要区别在于:假如当前活动为A,当我们启动一个新活动B时,如果新活动B只是占据了屏幕的一部分,比如说一个对话框,那么活动A就成了活动B的“背景”,此时虽然活动B处于栈顶,但活动A仍是可见的,那么onPause()方法就会被执行,而

onStop()方法不会执行;如果活动B占据了整个屏幕,活动A完全被“遮住”了,看不见了,那么就会依次执行onPause()、onStop()方法。

6. onDestroy()

此方法在活动被销毁前调用,执行后活动会变为销毁状态。

7. onRestart()

在活动由停止状态转变为运行状态之前调用。


活动的3个生存期

1.完整生存期

从onCreate()到onDestroy()

2.可见生存期

从onStart()到onStop(),在此期间活动总是可见的,但并不一定能和用户交互。

3.前台生存期

从onResume()到onPause(),在此期间活动处于运行状态,可以和用户交互。

可见除了onRestart()方法,其他方法都是两两相对的


活动的启动模式

活动有4种启动模式:standard、singleTop、singleTask、singleInstance,如果需要为活动指定启动模式,可以在AndroidManifest中为活动设置

android:launchMode属性。

1.standard

这是活动的默认启动模式,处于该模式时,系统不管这个活动是否已经在返回栈中存在,即使处于栈顶,每次启动都会创建该活动的一个新的实例。

2.singleTop

在singleTop模式下,启动活动时,如果返回栈的栈顶已经是该活动,则会直接使用它,不会再创建新的活动实例。如果活动处于返回栈中但不是在栈顶,那么启动该活动时还是会创建新的活动实例。

3.singleTask

当活动被指定为singleTask模式时,每次启动该活动,系统都会首先检查返回栈中是否已经存在该活动的实例(无论它位于栈顶还是其他位置),如果发现已经存在就会直接使用,并将该活动之上的活动全部出栈,让该活动处于栈顶,如果不存在,就会创建新的实例。

4.singleInstance

此模式下,当活动被启动时,会有一个新的返回栈来管理这个活动。

这个模式可以解决共享活动实例的问题。举个栗子:当前程序中的活动A是允许其他程序调用的,让其他程序和当前程序共享活动A的实例,使用前3种模式是无法实现的,因为每个程序都有自己的返回栈,同一个活动在不同的返回栈入栈就会创建不同的实例,但如果使用singleInstance模式就会有一个单独的返回栈来管理活动,无论哪个程序来访问这个活动,都会使用同一个返回栈,这样就实现了活动共享。

 

四、收获

重新学习了活动的生命周期,不敢说完全掌握了,但相比以前的理解更进了一步,尤其是对活动的4种启动模式。



返回列表 返回列表
评论

    分享到