美文网首页
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