Activity Task Final Analysis

来源:互联网 发布:time machine 恢复 mac 编辑:程序博客网 时间:2024/06/03 14:47

源码地址:https://github.com/NateRobinson/Activity-Task-Final-Analysis

版权声明:欢迎转载,转载请注明出处http://blog.csdn.net/u011771755

Activity任务栈模式终极分析:在吸收了网络上各路大神的分析文章之后,我自己还是忍不住想写下这个属于自己的终极分析Demo。

  • 一来总结各家所长,检测自己的学习成果;
  • 二来给自己这块内容的学习画上一个里程碑,并封存笔记,方便以后回味复习。

分析会用到的CMD命令:

adb shell dumpsys activity

AndroidMainifest启动模式

设置方式:
android:launchMode=”standard/singTop/singleTask/singInstance”

一、standard

该模式为Activity默认的启动模式,每启动一个Activity,新的Activity就会覆盖到旧的Activity上面:

standard启动模式任务栈分析图

二、singleTop

打开该模式下的Activity,系统会判断当前任务栈的栈顶是不是此Activity,如果是则不创建新的Activity直接引用并且会执行onNewIntent(Intent intent)方法,否则创建新的Activity:

singletop启动模式任务栈分析图

三、singleTask

打开该模式下的Activity,系统会判断当前APP的整个Activity应用栈中存不存在此Activity,如果存在,那么就会将这个Activity置顶【重点:同时会将刚才在此Activity之前的所有Activity都销毁】,否则创建新的Activity。

singletask启动模式任务栈分析图

[下面的分析摘自《Android群英传》]另外,如果是其他的程序以singleTask模式来启动这个Activity,那么它将创建一个新的任务栈。不过这里有一点需要注意得是,如果启动的模式为SingleTask的Activity已经在后台的一个任务栈中了,那么启动后,后台的这个任务栈将一起被切换到前台,理解图如下:

singletask启动模式任务栈分析图

四、singleInstance

打开该模式下的Activity,系统会单独为此Activity创建一个Task,如果此时又有其他应用要打开此Activity,就不需要再创建了,这样两个应用就可以共享该Activity了。

singleinstance启动模式任务栈分析图

五、一些注意点

使用singletop和singleinstance这两种模式的Activity中,不能使用startActivityForResult()方法来启动另一个Activity,具体讲解见网上大神博客:http://blog.csdn.net/xiabo851205/article/details/8491267

IntentFlag启动模式

一、Intent.FLAG_ACTIVITY_NEW_TASK

我在代码中使用intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);来设置了Activity的启动模式,但是真实跑起来,发现并无效果,后来才知道此FLAG的一般应用场景:通常使用在从Service中启动Activity的场景,由于在Service中不存在Activity栈,所以使用该Flag来创建一个新的Activity栈:

FLAG_ACTIVITY_NEW_TASK启动模式任务栈分析图

二、Intent.FLAG_ACTIVITY_SINGLE_TOP

android:launchMode="singTop"

三、Intent.FLAG_ACTIVITY_CLEAR_TOP

android:launchMode="singleTask"

四、Intent.FLAG_ACTIVITY_NO_HISTORY

使用了该模式的Activity,当这个Activity启动了其他的Activity之后就会消失,不会存在任务栈之中。

清空任务栈

一、clearTaskOnLaunch

在AndroidManifest.xml的<activity>标签中设置:

`android:clearTaskOnLaunch="true/false"`

此属性默认为false,为true时,每次返回该Activity时,都会将其之上所有的Activity清除。通过这个属性,可以让每个APP在初始化的时候,都只有一个Activity。

二、finishOnTaskLaunch

在AndroidManifest.xml的<activity>标签中设置:

`android:finishOnTaskLaunch="true/false"`

此属性默认为false,为true时,当离开了这个Activity所在的Task,用户再返回的时候,该Activity就会finish掉。

三、alwaysRetainTaskState

在AndroidManifest.xml的<activity>标签中设置:

`android:alwaysRetainTaskState="true/false"`

此属性默认为false,为true时,则该Activity所在的Task将不受任务清理命令,一直保持当前状态。

1 0
原创粉丝点击