这个知识点,可以先不了解,但是了解了后,可以加深对Activity的理解,以前觉得理论太多,就草草看了一遍,并没有影响后面的学习,但是,倒回来看的时候,才发现真的很有意思,比如在这个系列的笔记中的第4篇中数据的传输就说到一些问题。
开始学习前要先知道:
1.安卓中的返回栈,先进后出,都知道吧,活动就是放在返回栈中管理的。
2.在哪里设置Activity的启动模式,在AndroidManifest.xml中,给
<activity>标签指定:android:luanchMode="xxx"
来设置启动模式
3.指定了启动模式的Acitivity,才会以你指定的模式启动,不然就是默认模式启动
4.这里强调的是用Intent启动Acitvity,不是指重新唤醒Activity
一共四种:
1.standard
默认启动模式,你不设置时的默认启动模式。
该模式不管返回栈有没有一个活动的实例。
在不在栈顶,都会创建一个新的活动。
不信是吧?你在onCreate()方法中打印当前Activity的地址,然后用
Intent再启动一次这个当前活动,你看看两次打印的一不一样
2.singleTop
什么意思???当该活动在栈顶时就不会创建新的活动,不信??你继续试试。
3.singleTask
这个就是真正的单一模式了,一个很强硬的模式。为什么?
这个模式保证返回栈中不会有相同的活动实例,比如,MainAcitvity
在该模式中时,返回栈中只会有一个。怎么强硬??处于栈顶还好说
当不处于栈顶时,就会把返回栈中MainActivity之上的所有活动清掉
想见识一下吗???我们知道,标准的模式中从活动A启动一个
活动B,再从活动B启动一个活动A,如果这个过程你没有调用finish()
方法,那么你就要按3次返回键才能退出程序,但是在singleTask就按一次
4.singleInstance
这就厉害了,我们知道,每一个程序都有自己的返回栈来管理自己的Activity
但是这个模式就会创建一个新的返回栈,来管理你用该模式的Activity
使用的场景:假设我们的程序有一个活动要给其他程序使用,实现这个Activity
和其他程序共同使用一个返回栈来管理这个活动,就可以这样写,这样就不用在两个程序
的返回栈中又创建一个该活动。你可以打印当前返回栈的Id
获取返回栈Id的方法:getTaskId();