Activity堆栈详解
【超给力追-女生资-源】【企鹅:⒈О16.x.952б】 Activity作为Android四大组件之一,承载着显示界面的重要作用。了解Activity的启动模式也尤为重要。
实际上,Android中对Activity的处理是以堆栈形式进行的,堆栈是一种先进后出的数据结构,这里不再解释,需要的朋友请百度。
在Android中,每个Activity都会被放置到堆栈中,一个APP应用启动Main Activity时会创建一个堆栈,并将MainActivity压入到这个堆栈中。但Android中对Activity堆栈有很多种处理方式,其实启动模式就是这些处理方式,用来维护Activity并实现不同的需求。
一个应用可以有多个Activity堆栈,每个堆栈都有他们自己的名字,默认情况下堆栈的名字是该应用的包名,我们可以通过给Activity设置TaskAffinity属性来给该Activity设置放置在哪一个堆栈,TaskAffinity为一个String字符串,结构和包名类型,默认是应用包名,但TaskAffinity属性只对SingleTask模式的Activity和allowTaskReparenting为true的Activity有效,对其他启动模式无效。
在Android中,Activity的启动流程是这样的,首先系统会读取Activity的启动模式和TaskAffinity(堆栈名),如果存在该堆栈,则到该堆栈中进行操作,否则创建这个堆栈。需要注意的是,Android中有两种堆栈,分别是后台堆栈和前台堆栈,怎么理解呢?我们都知道Activity有可见性区分,如果我们的应用不止一个堆栈,那么可见的那个Activity所在的堆栈就是前台堆栈,其他的堆栈则为后台堆栈。并且在Android中,
如果启动一个Activity,这个Activity所在的堆栈就会被切换为前台堆栈,其他堆栈则会变为后台堆栈。
比如APP有两个堆栈①和②,①中有AB两个Activity,A在栈顶,②中有CD,C在栈顶,假设所有Activity都为SingleTop模式。这时前台堆栈为①,那么②就为后台堆栈,在内存中的序列就为①②=ABCD,如果这时候启动C,那么内存会把C所在的堆栈②提升为前台堆栈,①变为后台堆栈,内存序列为②①=CDAB。
Standard:Standard是Android中默认的Activity启动模式,该模式下启动该Activity都会在启动它的Activity所在的堆栈中创建一个新的Activity实例。比如在内存中有两个堆栈①②,①有A,②有B,这时A启动一个Standard的C,那么系统就会创建一个新的C并压入到①堆栈,如果B再启动C,那么系统又会创建一个C压入②堆栈。
SingleTop:SingleTop模式下,系统会查找需要操作的堆栈的栈顶是不是需要启动的Activity,如果是就调用该Activity的onNewIntent方法,否则创建该Activity并压入到它所需要的堆栈。需要注意的是它并不会因为启动它的Activity在哪个堆栈而受到改变。
SingleTask:该模式下,系统会查找所需要操作的堆栈内有没有该Activity,有的话就将在它之上的Activity全部弹出堆栈,并调用它的onNewIntent;没有的话就创建一个新的Activity在该堆栈中。SingleTask可以和TaskAffinity完美结合。
SingleInstance:该模式下,系统会自动给该Activity分配一个单独的堆栈,该Activity在这个堆栈中运行,并且整个app只有这一个
Activity实例。
如何查看堆栈的情况,可以在控制台输入adb shell dumpsys activity命令,并查看其中的most recent first。
3.? final变量(基本类型,类类型还是可以改值的)
堆的唯一作用就是存放所有对象实例与数组的。它是线程共享的,是Jvm所有管理的内存中最大的一块,也是垃圾收集器GC管理的主要区域。
2)?HelloLua有一个init函数(旁白:你妹纸的,进入正题好不?) Full ascending?STMFA (STMIB)? LDMFA (LDMDA)
当用户长时间离开task(当前task被转移到后台)时,系统会清除task中栈底activity外的所有activity。这样,当用户返回到task时,只留下那个task最初始的activity了。
最后一节会向你提供对于HotSop VM而言什么是JVM线程堆栈的一个概述,还有你将会遇到的各种不同的线程. 而对 IBM VM 线程堆栈形式详细内容将会在第四节向你提供.
带插入前一个节点指向带插入节点;p-next = q;?这样一个节点就插入到这条链表中去,
引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
实际上,Android中对Activity的处理是以堆栈形式进行的,堆栈是一种先进后出的数据结构,这里不再解释,需要的朋友请百度。
def push(self,x):# 入栈之前检查栈是否已满
堆 栈 详 解
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)