activity启动模式(1、standard,singleTop,singleTask,singleInstance)

来源:互联网 发布:仪器信息网 网络讲堂 编辑:程序博客网 时间:2024/05/20 18:17
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排序)



0 0