最近在看Android Developer文档时,看到了newIntent()。当应用处于OnStop状态,再回到之前的状态时,可以调用newIntent()再调用onStart(), onResume()。随后这里面讲到了启动模式(Launch Mode),共分为四种:SingleTask,SingleTop,Standard还有SingleInstance。所以查看了大家所写的资料,想通过自己的话把这四种模式区分开。
首先如果对Activity的Stack栈和Task任何有所了解,四种启动模式就相对容易理解了一些。
SingleInstance单一启动模式,也就是每个task中的stack里只能有一个activity存在。如果我们启动第一个activity称之为activity1, 被放入到task的stack中,然后不管我们是否启动第二个activity2或者activity1的一个新的实例,都只能放入新的task中。就如同我们已经打开了一个浏览器的网页,如果启动模式为singleInstance,那么我们想打开一个新的网页就只能用一个新的浏览器打开,而不能使用打开新的标签。
Standard模式也是我们最常用的一种模式,因为activity可以被无限实例化,所以在这种模式下,activity可以存在相同的task中的stack里面。假如我们在一个浏览器中打开了网页,在这种模式下,我开启新的网页就如同打开新的标签,无需另外启动一个网页浏览器。
SingleTask启动模式,我的理解是一个activity称之为activity1在这个task的stack的栈顶,当我们再次实例化activity1时是不允许的。但如果activity1不在栈顶,那么再次创建activity1时,将已经存在的activity1上面的activity从栈中移除,回到stack中已经存在的activity1处,而不是重新实例化activity1,。
SingleTop启动模式,一个activity称之为activity1在这个task的stack的栈顶,那么当我们再次创建activity1时是无法成功的,但如果activity1不在这个task的stack中的栈顶位置,那么再次实例化activity1是允许的。但不同singleTask移除activity1上面的activity,而是重新实例化activity1放到栈顶。