zoukankan      html  css  js  c++  java
  • 任务和返回栈

      任务(Task):

        一个程序的启动就是一个任务的创建,一个任务里面又有很多个Activity,为了管理这些Activity返回栈就出现了

      返回堆栈

        也就是一个常规的堆栈,遵循"先进后出的原则".

          也就是说

            push a,push b,push c 三次入栈

            pop,pop,pop  三次出栈

            得到的结果是c ,b,a

        Activity 和任务的默认行为总结如下:
        当 Activity A 启动 Activity B 时,Activity A 将会停止,但系统会保留其状态(例如,滚动位置和已输入表单中的文本)
        。如果用户在处于 Activity B 时按“返回”按钮,则 Activity A 将恢复其状态,继续执行。

        用户通过按“主页”按钮离开任务时,当前 Activity 将停止且其任务会进入后台。 系统将保留任务中每个 Activity 的状态。
        如果用户稍后通过选择开始任务的启动器图标来恢复任务,则任务将出现在前台并恢复执行堆栈顶部的 Activity。

        如果用户按“返回”按钮,则当前 Activity 会从堆栈弹出并被销毁。 堆栈中的前一个 Activity 恢复执行。销毁 Activity 时,
        系统不会保留该 Activity 的状态。

       既然Activity可能被销毁,那我们需要被保存的状态咋整呢?  

      保存 Activity 状态

        调用onSaveInstanceState()回调

      管理任务

        有4种方法来管理任务

        ->使用清单文件

              使用清单文件呢,也就是说在ActivityManiFest中的<Activity>节点中来定义任务的行为

              主要使用的是下面几个

                    taskAffinity 

                    launchMode 启动模式

                      ->standard 默认模式

                      ->singleTop 当前活动唯一

                      ->singleTask 单个任务,也是通过onNewIntent()传送,新活动在原来栈中,需要注意的是堆栈上有另一个任务的全部活动

                      ->singleInstance 同上,就是外部活动通过打开一个新任务来启动

                    allowTaskReparenting
                    clearTaskOnLaunch
                    alwaysRetainTaskState
                    finishOnTaskLaunch

        ->使用Intent标志

              FLAG_ACTIVITY_NEW_TASK //从字面上理解就是新任务,也就是重新打开一个任务,和上面的singleInstance
              FLAG_ACTIVITY_CLEAR_TOP //从字面上理解就是清除顶部,也就是如果当前这个Activity在顶部,则调用原来的,否则就删除要 调用的那个的前面的全部
              FLAG_ACTIVITY_SINGLE_TOP  //和上面的singleTop对应

        ->清理返回栈   

            您可以使用下列几个 Activity 属性修改此行为:
            alwaysRetainTaskState  保存任务状态
            clearTaskOnLaunch   只保存根状态
            finishOnTaskLaunch 此属性类似于 clearTaskOnLaunch,但它对单个 Activity 起作用,而非整个任务。
              此外,它还有可能会导致任何 Activity 停止,包括根 Activity。 设置为 "true" 时,
              Activity 仍是任务的一部分,但是仅限于当前会话。如果用户离开然后返回任务,则任务将不复存在。

        ->处理关联

            ->可以使用 <activity> 元素的 taskAffinity 属性修改任何给定 Activity 的关联。
                在两种情况下,关联会起作用:
                  ->FLAG_ACTIVITY_NEW_TASK
                      如果现有任务与新 Activity 具有相同关联,则会将 Activity 启动到该任务中。 否则,将开始新任务。
                  ->Activity 将其 allowTaskReparenting 属性设置为 "true"。
                      在这种情况下,Activity 可以从其启动的任务移动到与其具有关联的任务(如果该任务出现在前台)。

    Hold on, everything is possible.
  • 相关阅读:
    TP5.1的Request以及构造方法注入以及助手函数的使用
    TP5的类似TP3使用‘DEFAULT_THEME’的配置修改主题风格的方法,以及常见模板错误
    MySQL中进行树状所有子节点的查询
    nginx upstream 一致性哈希模块
    Nginx的基本入门
    php模式设计之 观察者模式
    php模式设计之 适配器模式
    笔记整理
    经验小结(个人笔记)
    防止页面跳转,可防ajax之后忽然跳转(主要用于采集)
  • 原文地址:https://www.cnblogs.com/student-note/p/6094107.html
Copyright © 2011-2022 走看看