美文网首页
Android Task

Android Task

作者: 成虫_62d0 | 来源:发表于2018-01-18 20:16 被阅读0次

什么是task

简单说task就是一些相关联的activity的集合,但activity之间不一定非得相关联。当我们按home键旁边那个方形键(recent-apps)时,屏幕上展示的就是一个个task。

task affinity

在manifest文件中,注册activity时如果不申明taskaffinity属性,默认就是app程序默认package名。默认情况下一个app中所有的activity都在一个task中。

<activity
android:taskAffinity=""
..
/>

默认情况下的affinity是app的包名

<manifest package="com.example"...>

launch modes

用来指示android系统用怎样的方式来启动activity

有俩种方式来定义launchMode:

在manifest中定义

使用Intent Flags

在manifest文件中定义

<activity android:launchMode = [“standard” | “singleTop” | “singleTask” | “singleInstance”] ../>

standard

默认的启动模式,入栈出栈操作。每一次创建一个新的activity

singletop

和standard和相似,但是有一点不同--系统会检查task栈,查看要启动的activity是否在栈顶,如果要启动的activity在栈顶,那么系统不会新创建要启动activity的实例,而是调用要启动activity的onNewIntent()方法

1-6IO-n4a4Lz4PJZ6uXd9CgA.png

singleTask
当一个activity注册时,必须要定义taskAffinity值,不然就算launchMode为singleTask,它被启动时,仍然不会新建一个task,而是在以前的task中启动。
我们能在该activity所处的栈中push其他activity的实例和其它task栈

singleInstance
和singleTask很相似,只有一个细微的差别---当一个activity的启动模式被定义为singleInstance时,在该activity所处的task栈中,不能push其他activity实例,也不能push其它task栈

当我们根据launchMOde启动一个activity时,android系统会查看taskAffinity的值。查看root activity是否有一样的taskAffinity值,如果taskAffnity值一样的,那么该activity被压入root Activity所在的task栈,如果不是,那么该activity就会压入一个全新的task栈。

使用intent flags来启动

FLAG_ACTIVITY_NEW_TASK 同launchMode中的singleTask
FLAG_ACTIVITY_SINGLE_TOP singleTop
FLAG_ACTIVITY_CLEAR_TOP 分俩种情况
1)所有的activity都在一个task中
这个flag会让系统清除要启动activity之上的activity,并让要启动的activity回到前台
2)activities在不同的task中
包含要启动的activity的task会被系统带回前台,并将要启动activity之上的activities清除。

如果该篇文章有任何问题,希望您能在百忙之中指出并联系我nanhuaqq@gmail.com

相关文章

网友评论

      本文标题:Android Task

      本文链接:https://www.haomeiwen.com/subject/zgtgoxtx.html