• android核心系列--2,关于任务栈(task)


    一,任务

    任务是由界面组件组成的一个栈,这些界面组件可以来自多个进程,多个应用,为共同完成一项任务而存在,比如写邮件时会用到邮件应用和联系人应用中的界面组件,这些界面组件在同一个任务中运行。

    二,界面组件的运行模式

    1,standard   标准模式,每次调用界面组件都会生成一个新的实例压入任务栈的栈顶。

    2,singleTop ,对应 Activity_FLAG_ACTIVITY_SINGLE_TOP,如果当前界面组件在栈顶,则再次调用该界面组件时不会生成新的实例,而是直接使用栈顶的界面组件,通过 onNewIntent方法将 Intent对象传给界面组件。 但是如果界面组件不在栈顶,则会在栈顶生成新的实例。

    3,singleTask 和 singleInstance,当调用这种运行模式的界面组件时,会启动一个新的任务(如果还没启动的话),将该界面组件放入栈底。如果再次调用该界面组件,则会将该界面组件上方清空,再次复用该界面组件。

    singleInstance有一点不同,就是新任务中有且只有这一个界面组件,而singleTask则是在新任务中会有多个其它的界面组件。

    使用singleTask还需注意:如果界面组件同时设置了任务粘度属性,android:taskAffinity属性,那么该界面组件就不一定必须是根组件了,如果指定的任务已经存在,它会直接跳到指定的任务中去。

    三,任务粘度  android:taskAffinity 属性

    表明这个界面组件想在哪个任务中运行,单独设置该属性没用,需要再设置下面的其中一项:

    1,设置 android:allowTaskReparenting = "true"

    2,通过设置Activity.FLAG_ACTIVITY_NEW_TASK标记。

    四,实例:

    1,安卓原生应用:浏览器应用

    其界面组件 BrowserActivity 配置成了 singleTask ,同时设置了 android:alwaysRetainTaskState = "true",该设置表示总是维护任务状态。

    2,联系人应用:

    通过 android:taskAffinity 将联系人管理,来电管理相关的界面组件分别放在不同的任务中。

    参考:

    《android开发精要》 范怀宇 著

  • 相关阅读:
    画图工具Graphviz安装配置
    转:完善eclipse+pdt作php开发中的代码提示能力
    转:SVN 出现This client is too old to work with working copy...错误
    Codeforces Round #260 (Div. 2)C. Boredom(dp)
    three.js 源代码凝视(十四)Math/Sphere.js
    android项目中刷新activity界面
    中科燕园GIS外包---地铁GIS项目
    华为HCNA教程(笔记)
    HapiJS开发手冊
    《Java并发编程实战》第十四章 构建自己定义的同步工具 读书笔记
  • 原文地址:https://www.cnblogs.com/imap/p/4167914.html
Copyright © 2020-2023  润新知