第一次学习Android中一个很重要的概念,启动模式。文章记录的也只是一些入门知识,随着学习的深入还会有activity启动模式的学习(2)和(3)。 下面分三个小点说一下对启动模式的理解区别以及如何设置。

预备知识

(1)activity是以任务栈的方式进行管理的,栈是一种先进后出的数据结构,栈中的activity只能通过出栈和压栈的方式改变顺序。 (2)启动一个application的时候,系统会默认创建一个任务栈,默认启动的activity都在同一个任务栈中。当启动另一个应用,之前那个任务栈就会被移到后台,成为后台任务栈,而刚启动的那个任务栈就被调到前台,成为前台任务栈。在用户面前显示的始终是前台任务栈中的栈顶activity。

对四种启动模式的理解

Android里面说的启动模式其实就是activity的启动方式。 有下面四种

standard--系统默认的activity启动模式,不管此时任务栈中的情况如何,每次启动一个activity,系统都会创建它的实例,并将其置于栈顶。

singleTop--另外一种常用的启动模式,当启动一个activity时,系统会检查一下当前任务栈中是否已经存在该activity实例,如果已经存在,就通过onNewIntent获得该实例把它置于栈顶。如果没有。那么创建该activity实例后将其置于栈顶。

singleTask-- 当以这种模式启动activity的时候,需要指定其任务栈。 activityA启动activityB的时候,会先在系统寻找是否存在该栈。

singleInstance--看到名字就会想到单例模式是吧~是的,确实也是这样的思想。为了充分利用activity实例达到极致,设置这个启动模式后,activityA启动activityB,会专门为activityB创建一个任务栈,并且创建activityB实例至于栈顶。该activity实例便可被系统内的应用共享。

总结

对于时不时想把某个activity展示在用户面前这件事,使用 默认:不管在不在栈顶,都创建(该栈中可能有多个实例)->栈顶复用:若在栈顶,则复用(该栈中可能有多个实例,但相对默认模式,少了点)->栈内复用:瞅瞅这个栈中有没有,有就用,没有就造一个(该栈中只有一个实例)->单例:直接自成一派,创个栈,只有这个activity一个实例并且在栈顶,不管哪个应用程序都能用(该应用程序上下文中只有一个实例)。 弄明白了这几种启动模式后,就需要根据实际情况决定使用哪种启动模式。

具体使用场景

由于本人目前对启动模式的使用比较少,后续有更多再补充。

如何设置activity的启动模式

一般有两种方式设置。

疑惑及解答

1.如何设置不同的任务栈? 3.当activityA以标准模式启动B的时候,B的实例被创建且处于activityA任务栈的顶端,那么这个时候B启动了A(standard)呢? 4.这两种设置方式有什么区别呢?常用的标志位有好几个,组合起来使用又有什么不同的效果呢?

这些个答案等我下一篇文章再继续介绍哈敬请关注android初级开发笔记-- activity启动模式的学习(2)