第一次学习Android中一个很重要的概念,启动模式。文章记录的也只是一些入门知识,随着学习的深刻还会有activity启动模式的学习(2)和(3)。 下面分三个小点说一下对启动模式的理解区别以及如何设置。数据结构
(1)activity是以任务栈的方式进行管理的,栈是一种先进后出的数据结构,栈中的activity只能经过出栈和压栈的方式改变顺序。 (2)启动一个application的时候,系统会默认建立一个任务栈,默认启动的activity都在同一个任务栈中。当启动另外一个应用,以前那个任务栈就会被移到后台,成为后台任务栈,而刚启动的那个任务栈就被调到前台,成为前台任务栈。在用户面前显示的始终是前台任务栈中的栈顶activity。app
Android里面说的启动模式其实就是activity的启动方式。 有下面四种学习
standard--系统默认的activity启动模式,无论此时任务栈中的状况如何,每次启动一个activity,系统都会建立它的实例,并将其置于栈顶。开发
singleTop--另一种经常使用的启动模式,当启动一个activity时,系统会检查一下当前任务栈中是否已经存在该activity实例,若是已经存在,就经过onNewIntent得到该实例把它置于栈顶。若是没有。那么建立该activity实例后将其置于栈顶。get
singleTask-- 当以这种模式启动activity的时候,须要指定其任务栈。 activityA启动activityB的时候,会先在系统寻找是否存在该栈。it
singleInstance--看到名字就会想到单例模式是吧~是的,确实也是这样的思想。为了充分利用activity实例达到极致,设置这个启动模式后,activityA启动activityB,会专门为activityB建立一个任务栈,而且建立activityB实例至于栈顶。该activity实例即可被系统内的应用共享。io
对于时不时想把某个activity展现在用户面前这件事,使用 默认:无论在不在栈顶,都建立(该栈中可能有多个实例)->栈顶复用:若在栈顶,则复用(该栈中可能有多个实例,但相对默认模式,少了点)->栈内复用:瞅瞅这个栈中有没有,有就用,没有就造一个(该栈中只有一个实例)->单例:直接自成一派,创个栈,只有这个activity一个实例而且在栈顶,无论哪一个应用程序都能用(该应用程序上下文中只有一个实例)。 弄明白了这几种启动模式后,就须要根据实际状况决定使用哪一种启动模式。入门
因为本人目前对启动模式的使用比较少,后续有更多再补充。社区
场景:使通知栏弹出Notification,点击Notification跳转到指定的Activity。 假设如今处于栈顶展现在用户面前的就是这个activity。若是是默认模式,则会再次打开当前的Activity。这样展现在用户面前的效果就会很奇怪。(看起来是闪了一下) 若是使用的启动模式是singleTop,就会避免这种现象的出现。ast
场景:假设咱们的程序中有一个Activity是容许其余程序调用的,咱们想让其余程序共享这个Activity的实例。若是使用的启动模式是singleInstance,就能够解决这个问题。
通常有两种方式设置。
1.如何设置不一样的任务栈?
2.当activityA以标准模式启动B的时候,B的实例被建立且处于activityA任务栈的顶端,那么这个时候B启动了A(standard)呢?
3.这两种设置方式有什么区别呢?经常使用的标志位有好几个,组合起来使用又有什么不一样的效果呢?
这些个答案等我下一篇文章再继续介绍哈~敬请关注Android初级开发笔记-- activity启动模式的学习(2)~
- 杨晓华:广州芦苇科技 APP 团队 Android 实习生
- 咱们正在招募小伙伴,有兴趣的小伙伴能够把简历发到 app@talkmoney.cn,备注:来自掘金社区
- 详情能够戳这里--> 广州芦苇信息科技