本文主要是介绍activity启动模式(1、standard,singleTop,singleTask,singleInstance),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
activity启动模式:(配置android:launchMode="")1、standard(标准模式,每次启动activity都会创建一个新的activity实例)
2、singleTop(可以有多个实例,但是不允许activity的多个实例叠加,即:如果有activity的实例 在栈顶的时候,启动这个activity,不会创建新的实例,而会调用其onNewIntent()方法,如果不在栈顶则创建新的实例)
toast.makeText().show()//让文本显示一段时间后消失,相当于c#中的tooltip或者具有存活时间的messageBox
3、singleTask(在栈中只能有一个实例,在同一个应用程序中启动它的时候,若不存在此activity实例,则会在当前栈中创建,若存在,则会把栈中在其之上的其他activity实例销毁掉,并调用此实例的onNewIntent()方法。)
4、singleInstance(只有一个实例,并且这个实例独立运行在一个activity任务栈中,即单独存在于一个栈中,这个任务栈中只有这个实例,不允许有别的activity存在)
Task概念:
task是一个具有栈结构的容器,可以放置多个activity实例
启动一个应用,系统就会为之创建一个task,来放置根activity
一个activity启动另一个activity时,两个activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前
taskAffinity:(task亲和力的意思)
指出了activity希望进入的task
如果一个activity没有显示的指明该activity的taskAffinity,那么它的这个属性就等于application指明的taskAffinity
如果application也没有指明,那么该taskAffinity的值就等于包名
task也有自己的affinity属性,它的值等于它的根activity的taskAffinity的值
intentFlag:
1,FLAG_ACTIVITY_NEW_TASK:
系统会寻找或创建一个新的task来放置目标activity,寻找时依据目标activity的taskAffinity属性来进行匹配,如果找到一个task的taskAffinity与之相同,就将目标activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标activity的taskAffinity,将目标activity放置于此task
2,FLAG_ACTIVITY_SINGLE_TOP:
当task中存在目标activity实例并且位于栈的顶端时,不在创建一个新的,直接利用这个实例
3,FLAG_ACTIVITY_CLEAR_TOP:
如果要激活的那个activity在任务栈中存在该实例,则不需要创建,只需要把该activity之上的activity实例都出栈
4,FLAG_ACTIVITY_REORDER_TO_FRONT:
如果栈中已经存在,则将它拿到栈顶,不会启动新的activity(重新给task中的activity排序)
这篇关于activity启动模式(1、standard,singleTop,singleTask,singleInstance)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!