Activity启动模式

一个完整的App基本上都是由多个Activity组成的,这么多的Acitivity肯定不能放养它们,系统有专门的方式——任务栈来存储创建Activity实例,栈的特点就是先进后出、后进先出,就像一个只有一个口的放羽毛球的纸筒,最先放进去的一个羽毛球,只能等其他的羽毛球都已经用完了,你才能把他拿出来使用。
有了栈,还是不够的,这样只算是把 Activity放在了一起散养,我们还需要为Activity设置规则——启动模式 ,让他们按照这个规则去启动,可以更好地去管理内存,降低内存占用。

Acitivity四种启动模式

一Standard

说明:Android创建Activity的默认启动模式,如果没有设置启动模式,默认执行此种模式。
特点:每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在(就像一个暴躁老哥,不要跟我讲什么复用什么模式,管你什么Acitivty,就俩字——新建,管那么多干啥)

——SingleTop

说明:正如名字Top一样,新建Activity的时候,系统会检查此Activity是否在栈顶,也就是最后一次入栈的Activity,如果就是在栈顶,那么就不会新建Activity,而是复用此Activity,相反如果没有在栈顶,那么就会创建新的Activity。
特点:系统只关心栈顶,不会关注栈内的其他位置,即使栈里存在,他也不会管,因为你不是栈顶的,所以对不起,就当你不存在,我要创建新的。

——SingleTask

说明:要创建的Activity已经存在于栈中时,此时不会创建新的Activity,而是直接复用,如果不存在才会创建新的Activity。
特点:系统检查的范围相比SingleTop更加的广泛了,从头扩展到了全身,但是SingleTask是一个狠角色,如果创建的Activity存在,那么他就会到栈顶,这个过程很"血腥",他会把排在他前面的Activity全部干掉,这样他就可以到达栈顶了。

——SingleInstance

说明:狠角色中的狠角色,是全局的单例模式,他就是SingleTask'plus版,具有SingleTask的特性,加强的地方体现在,他一个Activity独占一个任务栈。
特点:使用这种启动模式的一般都是系统应用,比如,Launch、锁屏键的应用等,这样创建的Activity有一种唯我独尊的感觉,自己霸占一个栈,如果要新建,如果存在直接复用,不存在在创建。

使用哪种启动模式直接在Manifest.xml配置android:launchMode即可

Activity 的 Flags

Flags可以动态的设置上面的启动模式,还可以影响Activity的运行状态,标记有很多种,不用全部都背下来,尤其是像我一样英语比较垃圾的人哈哈。主要记住下面几个,剩下的关键时刻靠度娘就可以了。

FLAG_ACTIVITY_SINGLE_TOP

不多解释,和上边介绍的SingleTop一个样。

FLAG_ACTIVITY_NEW_TASK

同样的不多解释,毕竟和上边介绍的SingleTask一个样。

FLAG_ACTIVITY_CLEAR_TOP

敲黑板,不一样的来了:
具有此标记位的Activity,销毁目标Activity和它之上的所有Activity,重新创建目标Activity,如果Activity的启动模式是默认的,就会杀死目标Activity,然后重新创建,当然你不希望Activity被杀死重新创建,可以加上下边的代码(大家应该知道什么意思了吧) : intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

FLAG_ACTIVITY_REORDER_TO_FRONT

当接收Intent的Activity处于非销毁状态,那么接收Intent的Activity就会被置于栈顶。
重复利用,不会新建一个Actiivity,举个栗子 ABCD,重新启动B,就会变成ACDB。是不是很简单。


064d801dc6b213e_w200_h215.jpg
使用哪种Flags直接代码加上:

intent.addFlags(Intent.XXXXXX);

总结

如果哪里又不好的地方希望大家多多提意见,如有问题请随时联系我,我会及时改正的,谢谢各位萌新大佬,小牛大牛。

你可能感兴趣的:(Activity启动模式)