• Android开发笔记——Activity与Task


    ActivityTask

        一个application包含多个Activity,这些Activity默认都有亲属关系,它们同属一个task,当启动Activity时,它们被放到了同一个task中,task是一个栈,一个task通常对应一个application中的多个activity,例如打开邮件程序,该程序包含多个activity界面,他们都在同一个task中,但也可能对应的是不同application中的多个activity,例如邮件程序中,当查看图片附件时,可能要打开图片查看程序中的activity,放该activity到当前的task中。

    一个Task中的activity总是按照后进先出的顺序进行,有时我们可能希望打开的新Activity在一个新的task中,而不是和现有的activity在同一个task中,我们可以有两种方式做到

    Intent方式:intent.setFlag(Intent.FLAG_NEW_TASK);//不适合startActivityForResult()

    Xml方式设置activitylaunchMode属性

    <activity android:name=".GongGaoListActivity"

                      android:launchMode="singleTask"

                      android:label="@string/app_name">

            </activity>

    这时启动新的Activity时,系统会查找与新Activity亲属关系相同的task,放到其中,复用这个task,如果找不到,就会为新Activity新建一个task

    有时我们可能需要不管task中有多少activity,不管他们如何排序,但总是从一个固定的Activity开始执行。这种情况,也是指定Activity的启动模式为singleTask

     

    ·  栈的清除:

    默认情况下,如果用户离开一个task较长时间,系统会自动清除除了栈底Activity之外的其他Activity,可以通过设置该栈底Activity的属性来改变这种情况。

     

    android:alwaysRetainTaskState:

    设置为true,一直保留task状态,不清除

     

    android:clearTaskOnLaunch:

    设置为true,用户离开应用程序再次返回时,系统会清除除根Activity之外的所有Activity

     

    android:finishOnTaskLaunch:

    设置为true,用户离开程序时,所有的Activity被清除。

  • 相关阅读:
    如何让你的Sublime和Codeblocks支持C++11
    Python print不换行输出的替代方法
    阶梯博弈
    hdu4633_Polya定理
    Ural_1169_Pairs
    ACM竞赛中的魔方问题专题(不定时更新)
    LintCode 35. 翻转链表
    windows中mysql5.7中配置中文字符集和默认datadir
    CentOS7使用打开关闭防火墙与端口
    关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑
  • 原文地址:https://www.cnblogs.com/90zyh/p/2778423.html
Copyright © 2020-2023  润新知